Android Activity的生命周期和Activity间传递数

系统 1737 0

Activity 生命周期:

使用Bundle 在Activity 间传递数据1:
1.1从源Activity 中传递数据

    Intent openWelcomeActivityIntent=new Intent();
Bundle myBundelForName=new Bundle();
myBundelForName.putString("Key_Name",inName.getText().toString());
myBundelForName.putString("Key_Age",inAge.getText().toString());
openWelcomeActivityIntent.putExtras(myBundelForName);
openWelcomeActivityIntent.setClass(AndroidBundel.this, Welcome.class);
startActivity(openWelcomeActivityIntent);
  

 

1.2目标Activity 中获取数据

    //从Intent 中获取数据
Bundle myBundelForGetName=this.getIntent().getExtras();
String name=myBundelForGetName.getString("Key_Name");
myTextView_showName.setText("欢迎您进入:"+name);
  

使用Bundle 在Activity 间传递数据2:
2.1从源请求Activity 中通过一个Intent 把一个服务请求传到目标Activity 中

//从Intent 中获取数据

    Bundle myBundelForGetName=this.getIntent().getExtras();
String name=myBundelForGetName.getString("Key_Name");
myTextView_showName.setText("欢迎您进入:"+name);
private Intent toNextIntent;//Intent 成员声明
toNextIntent=new Intent();//Intent 定义
toNextIntent.setClass(TwoActivityME3.this, SecondActivity3.class);
//设定开启的下一个Activity
startActivityForResult(toNextIntent, REQUEST_ASK););
  

2.2开启Intent 时候,把请求码同时传递在源请求Activity 中等待Intent 返回应答结果,通过重载onActivityResult()方法

@Override

    protected void onActivityResult(int requestCode,int resultCode,Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if(requestCode==REQUEST_ASK){
    if(resultCode==RESULT_CANCELED){
      setTitle("Cancel****");
    }else if(resultCode==RESULT_OK){
      showBundle=data.getExtras();//从返回的Intent中获得Bundle
      Name=showBundle.getString("myName");//从bundle中获得相应数据
       text.setText("the name get from the second layout:\n"+Name);
     }
    }
}
  

☻ 第一个参数是你开启请求Intent时的对应请求码,可以自己定义。
☻ 第二个参数是目标Activity返回的验证结果码
☻ 第三个参数是目标Activity返回的Intent
2.3目标Activity 中发送请求结果代码,连同源Activity 请求的数据一同绑定到Bundle
中通过Intent 传回源请求Activity 中

  1. backIntent= new  Intent();   
  2. stringBundle= new  Bundle();   
  3. stringBundle.putString( "myName" , Name);   
  4. backIntent.putExtras(stringBundle);   
  5. setResult(RESULT_OK, backIntent); //返回Activity结果码   
  6. finish();  


Android Activity的生命周期和Activity间传递数据

 

方法名称
描述
Killable?(能否被杀掉)
下一个调用的方法
当这个Activity第一次被创建的时候,调用此方法。这个方法通常用于:1、为Activity设置所要使用的布局文件2、为按钮绑定监听器等静态的设置操作。
No
当Activity处于可见状态时,调用此方法。
No
开始与用户进行交互时(能够获得用户焦点,可以进行点击等操作的时候),调用此方法。
No
之前被停止,现在重新启动,调用此方法。
No
当系统启动另外一个新的Activity时,先调用前一个Activity的此方法。这个方法通常用于:保存现有的Activity中的数据、停止动画等,这个实现方法必须非常快。
Yes
当Activity处于不可见状态时(现有的Activity被新的Activity完全覆盖时),调用此方法。
注:如果只是在现有的Activity中弹出一个对话框,没有完全覆盖现有的Activity的话是不会调用此方法的。
Yes
销毁Activity。
有两种情况会对Activity进行销毁:1、在系统不足以支撑现有的应用程序的情况下,系统会关闭(销毁)掉一部分系统认为不必要的Activity,以节省空间。2、程序中手动调用finish()方法进行销毁。
Yes
nothings
关于能否被杀掉:当一个Activity调用了onPause()、onStop()或onDestroy()方法( Killable? 为Yes的方法),而系统在一定情况下(如系统不足以支撑现有的应用程序的情况下),会先关闭(销毁)掉这部分Activity。

实例:创建一个 Android 应用程序,写两个 Activity ,都实现以上 7 个方法,通过从第一个 Activity 跳转到第二个 Activity ,然后点击模拟器右侧的返回按钮,根据应用程序中输出的内容观察 Activity 的生命周期。

在这里顺便大致记录一下开发步骤:

1 、创建一个 Android 应用程序

2 、写两个 Activity FirstActivity SecondActivity ),都实现以上 7 个方法,并都输出一句语句。

3 、因为要从 FirstActivity 跳转到 SecondActivity ,所以要在 FirstActivity 的布局文件中添加一个按钮,并且要写一个监听器,为按钮绑定 OnclickListener 事件。

4 、不要忘记将新创建的 Activity 添加到 AndroidManifest.xml 文件中。

5 、然后运行程序观察。

(这里只大致讲了一下开发流程没有将具体的代码贴出来,现在将程序打包了,有需要的可在附件中下载)

运行程序:

1 、当程序刚开始运行 FirstActivity 的时候,控制台输出以下内容:

从控制台输出内容来看,程序先执行了 FirstActivity onCreate() 方法,然后再依次执行了 onStart() onResume() 方法。

2 、当点击 FristActivity 上的按钮时,控制台输出以下内容:

从控制台输出内容来看,程序先调用了 FirstActivity onPause() 方法,然后再一次调用了 SecondActivity onCreate() onStart() onResume() 方法,最后调用了 FirstActivity onStop() 方法。

3 、点击模拟器右侧的返回按钮,控制台输出以下内容:

Android Activity的生命周期和Activity间传递数据

从控制台输出内容来看,程序先调用了 SecondActivity onPause() 方法,然后再依次调用了

FirstActivity onRestart() onStart() onResume() 方法,再调用了 SecondActivity onStop() onDestroy() 方法。

注意:当点击返回的时候,这里调用的不是 FirstActivity onCreate() 方法而是 onRestart() 方法,因为在之前 FirstActivity 已经被创建过了并且没有销毁,只要当 FirstActivity 销毁了再调用 FirstActivit y 的时候才会调用 onCreate() 方法。

Android Activity的生命周期和Activity间传递数据


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论