Android Activity与Intent详解及示例代码

Android有三个基础组件Activity,Service和BroadcastReceiver,他们都是依赖Intent来启动。本文介绍的是Activity的生命周期以及针对Activity的Intent使用。

之前的例子一直都是使用Activity,在一个Layout XML与一个Activity捆绑的情况下可以视为一个Form,多个Layout XML与一个Activity捆绑的话那就是个Application本身了。Intent可以分为显式Intent和隐式Intent:显式Intent用于启动明确的目标组件(前面所说的三大组件),同一个Application内的多个Activity调用也是显式Intent;隐式Intent就是调用没有明确的目标组件,可以是系统也可以是第三方程序。隐式Intent一般用于调用系统组件功能,相关例程都是网络上很容易找到的(调用某些系统组件的时候要申请权限)。

Acitivity的运行状况分为:onCreate、onDestroy、onStart、onStop、onRestart、onResume、onPause,onCreate对应onDestroy,onStart对应onStop,onResume对应onPause。

先贴出本文运行截图:

这个是从Acitivity1转到Activity2的时候,Acitivity1的状态变化,使用了finish()会触发onDestroy()。

这个是从Activity2转到Activity1的时候,Acitivity2的状态变化。从两次Activity的启动可以看出,流程是onCreate()->onStart()->onResume()三个方法,销毁是onPause()->onStop()->onDestroy()。另外,要往工程添加第二个Activity,需要到AndroidManifest.xml->Application那里添加Activity2。

  main1.xml的源码:

XML/HTML代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical" android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <Button android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:id="@+id/main1.Button01"
    android:text="跳转到Activity2"></Button>
  <EditText android:text="@+id/EditText01" android:id="@+id/EditText01"
    android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText>
  <Button android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:id="@+id/main1.Button02"
    android:text="跳转到外部Activity"></Button>
</LinearLayout> 

main2.xml的源码:

XML/HTML代码

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout android:id="@+id/LinearLayout01"
  android:layout_width="fill_parent" android:layout_height="fill_parent"
  xmlns:android="http://schemas.android.com/apk/res/android">
  <Button android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:id="@+id/main2.Button01"
    android:text="返回Activity1"></Button>
</LinearLayout> 

   Activity1的源码:

package com.testActivityIntent;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class testActivityIntent extends Activity {
  /** Called when the activity is first created. */
  Button btnToInternalActivity;
  Button btnToExternalActivity;
  EditText tbBundle;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.e("Activity1", "onCreate");//显示当前状态,onCreate与onDestroy对应
    setContentView(R.layout.main1);  

    btnToInternalActivity=(Button)this.findViewById(R.id.main1_Button01);
    btnToExternalActivity=(Button)this.findViewById(R.id.main1_Button02);
    btnToInternalActivity.setOnClickListener(new ClickEvent());
    btnToExternalActivity.setOnClickListener(new ClickEvent());
    tbBundle=(EditText)this.findViewById(R.id.EditText01);
  }
  public void onDestroy()
  {
    super.onDestroy();
    Log.e("Activity1", "onDestroy");//显示当前状态,onCreate与onDestroy对应
  }
  @Override
  public void onStart()
  {
    super.onStart();
    Log.e("Activity1", "onStart");//显示当前状态,onStart与onStop对应
  }
  @Override
  public void onStop()
  {
    super.onStop();
    Log.e("Activity1", "onStop");//显示当前状态,onStart与onStop对应
  }
  @Override
  public void onRestart()
  {
    super.onRestart();
    Log.e("Activity1", "onRestart");
  }
  @Override
  public void onResume()
  {
    super.onResume();
    Log.e("Activity1", "onResume");//显示当前状态,onPause与onResume对应
    SharedPreferences prefs = getPreferences(0); //SharedPreferences 用于存储数据
    String restoredText = prefs.getString("editText01", null);
    if (restoredText != null) {
      this.tbBundle.setText(restoredText);
    }
  }
  @Override
  public void onPause()
  {
    super.onResume();
    Log.e("Activity1", "onPause");//显示当前状态,onPause与onResume对应
    //保存文本框的内容,使得重回本Acitivity的时候可以恢复
    SharedPreferences.Editor editor = getPreferences(0).edit();//SharedPreferences 用于存储数据
    editor.putString("editText01", this.tbBundle.getText().toString());
    editor.commit();
  }  

  class ClickEvent implements View.OnClickListener{
    @Override
    public void onClick(View v) {
      if(v==btnToInternalActivity)
      {
        Intent intent = new Intent();
        intent.setClass(testActivityIntent.this,Activity2.class);  

        //new一个Bundle对象,并将要传递的数据传入
        Bundle bundle = new Bundle();
        bundle.putString("Text",tbBundle.getText().toString());  

        //将Bundle对象assign给Intent
        intent.putExtras(bundle);  

        //调用Activity2
        startActivity(intent);  

        testActivityIntent.this.finish();//会触发onDestroy();
      }
      else if(v==btnToExternalActivity)
      {
        //有些外部调用需要开启权限
        Uri uri = Uri.parse("http://google.com");
        Intent it = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(it);
      }  

    }  

  }  

} 

   Activity2的源码:

package com.testActivityIntent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class Activity2 extends Activity {
  Button btnBackMain1;
  public void onCreate(Bundle savedInstanceState)
   {
    super.onCreate(savedInstanceState);
    Log.e("Activity2", "onCreate");//显示当前状态,onCreate与onDestroy对应  

    //加载activity2.xml
    setContentView(R.layout.main2);  

    //得Intent中的Bundle对象
    Bundle bunde = this.getIntent().getExtras();
    //取得Bundle对象中的数据
    Log.i("In_Text", bunde.getString("Text"));
    btnBackMain1=(Button)this.findViewById(R.id.main2_Button01);
    btnBackMain1.setOnClickListener(new ClickEvent());
   }  

  public void onDestroy()
  {
    super.onDestroy();
    Log.e("Activity2", "onDestroy");//显示当前状态,onCreate与onDestroy对应
  }
  @Override
  public void onStart()
  {
    super.onStart();
    Log.e("Activity2", "onStart");//显示当前状态,onStart与onStop对应
  }
  @Override
  public void onStop()
  {
    super.onStop();
    Log.e("Activity2", "onStop");//显示当前状态,onStart与onStop对应
  }
  @Override
  public void onRestart()
  {
    super.onRestart();
    Log.e("Activity2", "onRestart");
  }
  @Override
  public void onResume()
  {
    super.onResume();
    Log.e("Activity2", "onResume");//显示当前状态,onPause与onResume对应
  }
  @Override
  public void onPause()
  {
    super.onResume();
    Log.e("Activity2", "onPause");//显示当前状态,onPause与onResume对应
  }  

  class ClickEvent implements View.OnClickListener{
    @Override
    public void onClick(View v) {
      if(v==btnBackMain1)
      {  

        Intent intent = new Intent();
        intent.setClass(Activity2.this,testActivityIntent.class);  

        //调用Activity1
        startActivity(intent);  

        Activity2.this.finish();//会触发onDestroy();
      }  

    }  

  }
} 

以上就是Android Activity与Intent 的资料整理,后续继续补充,谢谢大家对本站的支持!

(0)

相关推荐

  • Android利用Intent实现记事本功能(NotePad)

    本文实例为大家分享了Intent如何实现一个简单的记事本功能的演示过程,供大家参考,具体内容如下 1.运行截图 单击右上角[-]会弹出[添加]菜单项,长按某条记录会弹出快捷菜单[删除]项. 2.主要设计步骤 (1)添加引用 鼠标右击[引用]à[添加引用],在弹出的窗口中勾选"System.Data"和"System.Data.SQlite",如下图所示: 注意:不需要通过NuGet添加SQLite程序包,只需要按这种方式添加即可. (2)添加图片 到Android

  • Android开发中Intent用法总结

    本文实例讲述了Android开发中Intent用法.分享给大家供大家参考,具体如下: Android手机软件开发中,Intent作为手机软件开发时很重要的对象需要引起我们的重视,实际上,intent也是体现Android开发具有其独特性的一个标志性的对象. 当一个Activity要启动另外一个Activity的时候,也许一个以前较为熟悉的模式是:调用一个new函数,直接创建具有窗口特征类的对象,又或者直接调用一个启动函数来启动.这种方式简洁.明了,但是却违背了Android开发的理念.Andro

  • Android实现打开各种文件的intent方法小结

    本文实例讲述了Android实现打开各种文件的intent方法.分享给大家供大家参考,具体如下: import android.app.Activity; import Android.content.Intent; import android.net.Uri; import android.net.Uri.Builder; import Java.io.File; import android.content.Intent; //自定义android Intent类, //可用于获取打开以下

  • Android使用Intent发送短信的实现方法

    本文实例讲述了Android使用Intent发送短信的实现方法.分享给大家供大家参考,具体如下: 在一个Activity中使用Intent发送短信 package com.zhuguangwei; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.

  • Android 通过Intent使用Bundle传递对象详细介绍

    Android 通过Intent使用Bundle传递对象 Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法. 被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.Parcelable Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable. 两种序列化方式的区别: 1.在使用内存的时候,Parcelable比Serializa

  • Android中Intent传递对象的3种方式详解

    前言 相信Intent的用法大家已经比较熟悉了,Intent可以用来启动Activity,Service等等,同时我们也可以通过Intent来进行传递数据,当我们使用Intent在Activity 间传递信息时发现putExtra() 方法并不支持自定义对象的传输,下面就来介绍三种解决方式. 一.Serializable 方式 这是最简单的一种方法,因为我们要做的就是让我们自定义的对象实现 Serializable 这个空接口. public class Person implements Se

  • Android常用的intent action汇总

    本文总结讲述了Android常用的intent action功能.分享给大家供大家参考,具体如下: Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行动作和产生事件.Intent作为联系各Activity之间的纽带,其作用并不仅仅只限于简单的数据传递.通过其自带的属性,其实可以方便的完成很多较为复杂的操作.例如直接调用拨号功能.处理接收短信,诸如此

  • Android Intent传递数据底层分析详细介绍

    Android  Intent传递数据底层分析详细介绍 我们知道在Activity切换时,如果需要向下一个ActivityB传递数据,可以借助Intent对象的putExtra方法. 但是不知各位有没有想过这样一个问题:ActivityB中获取到的对象跟上一个Activity中的那个对象有什么关系? 换句话说就是,我在ActivityB中通过Intent获取的对象跟ActivityA中的那个对象,有没有可能是同一个对象? 按照常理来说,博主提出一个设想后续的就是证明过程了,但是我要遗憾的告诉你,

  • Android Activity中使用Intent实现页面跳转与参数传递的方法

    本文实例讲述了Android Activity中使用Intent实现页面跳转与参数传递的方法.分享给大家供大家参考,具体如下: 新建一个FirstAvtivity.java package com.zhuguangwei; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.O

  • Android Activity与Intent详解及示例代码

    Android有三个基础组件Activity,Service和BroadcastReceiver,他们都是依赖Intent来启动.本文介绍的是Activity的生命周期以及针对Activity的Intent使用. 之前的例子一直都是使用Activity,在一个Layout XML与一个Activity捆绑的情况下可以视为一个Form,多个Layout XML与一个Activity捆绑的话那就是个Application本身了.Intent可以分为显式Intent和隐式Intent:显式Intent

  • Android Fragment动态创建详解及示例代码

    Android Fragment 动态创建 Fragment是activity的界面中的一部分或一种行为.可以把多个Fragment组合到一个activity中来创建一个多界面并且可以在多个activity中重用一个Fragment.可以把Fragment任务模块化的一段activity,它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除. Fragment不能独立存在,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影

  • Android 进度条使用详解及示例代码

    在这里,总结一下loading进度条的使用简单总结一下. 一.说起进度条,必须说说条形进度条,经常都会使用到嘛,特别是下载文件进度等等,还有像腾讯QQ安装进度条一样,有个进度总给人良好的用户体验. 先来找图看看,做这个图完成不用图片就可以做到了. 看下xml布局文件,其实就是直接用xml写的在加两个属性设置一下就好了,一个style,另一个是background. <ProgressBar android:id="@+id/pb_progressbar" style="

  • Android 对话框(Dialog)大全详解及示例代码

    Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog(int), dismissDialog(int)等方法,如果使用这些方法的话,Activity将通过getOwnerActivity()方法返回该Activity管理的对话框(dialog). onCreateDialog(int):当你使用这个回调函数时,Android系统会有效的设置这个Acti

  • Android 的触摸事件详解及示例代码

    由于触摸(Touch)而触发的事件 Android的事件:onClick, onScroll,onFling等等,都是由许多个Touch组成的.其中Touch的第一个状态肯定是ACTION_DOWN,表示按下了屏幕.之后,touch将会有后续事件,可能是: ACTION_MOVE //表示为移动手势 ACTION_UP //表示为离开屏幕 ACTION_CANCEL //表示取消手势,不会由用户产生,而是由程序产生的 一个Action_DOWN, n个ACTION_MOVE, 1个ACTION_

  • Android banner的使用详解与示例

    目录 效果图: 添加依赖 添加权限到你的 AndroidManifest.xml 布局文件 逻辑代码 常见的一些属性设置 方法 Attributes属性 Android----banner使用详解 昨天10.31 ,斗破苍穹的三年之约终于出来了,自己也等了很久很久,敬师长,敬家人,敬朋友,敬每一个前行路上正在奋战的自己,星光不问赶路人,时间不负有心人. 效果图: 添加依赖 implementation 'com.youth.banner:banner:2.1.0' 添加权限到你的 Android

  • AngularJs bootstrap详解及示例代码

    AngularJs学习笔记系列第一篇,希望我可以坚持写下去.本文内容主要来自 http://docs.angularjs.org/guide/ 文档的内容,但也加入些许自己的理解与尝试结果. 一.总括 本文用于解释Angular初始化的过程,以及如何在你有需要的时候对Angular进行手工初始化. 二.Angular <script> 标签 本例用于展示如何通过推荐的路径整合Angular,实现自动初始化. <!doctype html> <html xmlns:ng=&qu

  • Android UI 实现老虎机详解及实例代码

    Android UI 实现老虎机详解 listview 的使用步骤 简单的listview老虎机实现 1.实现效果图 2.需要掌握的知识 listview的使用步骤 listview的Adapter接口的实现 listview中的MVC 3.知识详解 ListView 是一个控件,一个在垂直滚动的列表中显示条目的一个控件,这些条目的内容来自于一个ListAdapter .EditText Button TextView ImageView Checkbox 五大布局. 1.布局添加Listvie

  • Android json数据解析详解及实例代码

     Android json数据解析详解 移动开发经常要与服务器数据交互,也常使用json数据格式,那就说说Android json解析. 1.最简单json格式解析如下: //解析json ry { JSONTokener jsonParser = new JSONTokener(strResult); JSONObject jsonObj = (JSONObject) jsonParser.nextValue(); String strsportsTitle = jsonObj.getStri

  • Android 事件分发详解及示例代码

    事件分发是Android中非常重要的机制,是用户与界面交互的基础.这篇文章将通过示例打印出的Log,绘制出事件分发的流程图,让大家更容易的去理解Android的事件分发机制. 一.必要的基础知识 1.相关方法 Android中与事件分发相关的方法主要包括dispatchTouchEvent.onInterceptTouchEvent.onTouchEvent三个方法,而事件分发一般会经过三种容器,分别为Activity.ViewGroup.View.下表对这三种容器分别拥有的事件分发相关方法进行

随机推荐