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 中
方法名称
|
描述
|
Killable?(能否被杀掉)
|
下一个调用的方法
|
当这个Activity第一次被创建的时候,调用此方法。这个方法通常用于:1、为Activity设置所要使用的布局文件2、为按钮绑定监听器等静态的设置操作。
|
No
|
||
当Activity处于可见状态时,调用此方法。
|
No
|
or onStop()
|
|
开始与用户进行交互时(能够获得用户焦点,可以进行点击等操作的时候),调用此方法。
|
No
|
||
之前被停止,现在重新启动,调用此方法。
|
No
|
||
当系统启动另外一个新的Activity时,先调用前一个Activity的此方法。这个方法通常用于:保存现有的Activity中的数据、停止动画等,这个实现方法必须非常快。
|
Yes
|
or onStop()
|
|
当Activity处于不可见状态时(现有的Activity被新的Activity完全覆盖时),调用此方法。
注:如果只是在现有的Activity中弹出一个对话框,没有完全覆盖现有的Activity的话是不会调用此方法的。
|
Yes
|
or onDestroy()
|
|
销毁Activity。
有两种情况会对Activity进行销毁:1、在系统不足以支撑现有的应用程序的情况下,系统会关闭(销毁)掉一部分系统认为不必要的Activity,以节省空间。2、程序中手动调用finish()方法进行销毁。
|
Yes
|
nothings
|
实例:创建一个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、点击模拟器右侧的返回按钮,控制台输出以下内容:
从控制台输出内容来看,程序先调用了SecondActivity的onPause()方法,然后再依次调用了
FirstActivity的onRestart()、onStart()、onResume()方法,再调用了SecondActivity的onStop()、onDestroy()方法。
注意:当点击返回的时候,这里调用的不是FirstActivity的onCreate()方法而是onRestart()方法,因为在之前FirstActivity已经被创建过了并且没有销毁,只要当FirstActivity销毁了再调用FirstActivit y的时候才会调用onCreate()方法。