Android 中Activity生命周期分析(二):从AActivity 到BActivity过程分析
来源:互联网 发布:阿里云cdn回源 编辑:程序博客网 时间:2024/06/08 01:09
package com.king.review.base;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.LinearLayout;/** * author: king.liu * data:2013-10-8 下午8:02:40 * do:TODO */public class ActivityLife extends Activity { public static final String TAG = "ActivityLife"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(this); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(140, 80); layout.setOrientation(LinearLayout.HORIZONTAL); Button btn = new Button(this); btn.setLayoutParams(params); btn.setText("change next"); layout.addView(btn); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent intent = new Intent(); intent.setClass(ActivityLife.this, AActivity.class); ActivityLife.this.startActivity(intent); } }); setContentView(layout); Log.i(TAG, "onCreate ..."); } @Override protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub super.onSaveInstanceState(outState); } @Override protected void onStart() { super.onStart(); Log.i(TAG, "onStart ..."); } @Override protected void onRestart() { super.onRestart(); Log.i(TAG, "onRestart ..."); } @Override protected void onResume() { super.onResume(); Log.i(TAG, "onResume ..."); } @Override protected void onPause() { super.onPause(); Log.i(TAG, "onPause ..."); } @Override protected void onStop() { super.onStop(); Log.i(TAG, "onStop ..."); } @Override protected void onDestroy() { super.onDestroy(); Log.i(TAG, "onDestory ..."); }}
bActiviy
package com.king.review.base;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.LinearLayout;import android.widget.TextView;/** * author: king.liu * data:2013-10-16 上午7:09:22 * do:TODO */public class AActivity extends Activity { public static final String TAG = "AActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(this); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(140, 80); layout.setOrientation(LinearLayout.HORIZONTAL); TextView tv = new TextView(this); tv.setLayoutParams(params); tv.setText("二界面"); layout.addView(tv); setContentView(layout); Log.i(TAG, "onCreate ..."); } @Override protected void onStart() { super.onStart(); Log.i(TAG, "onStart ..."); } @Override protected void onRestart() { super.onRestart(); Log.i(TAG, "onRestart ..."); } @Override protected void onResume() { super.onResume(); Log.i(TAG, "onResume ..."); } @Override protected void onPause() { super.onPause(); Log.i(TAG, "onPause ..."); } @Override protected void onStop() { super.onStop(); Log.i(TAG, "onStop ..."); } @Override protected void onDestroy() { super.onDestroy(); Log.i(TAG, "onDestory ..."); }}
ok,准备工作已经完成,开始分析了:
说明:这里我说的AActivity --->ActivityLife; BActivity--->AActivity, 刚开始没有命名好,呵呵。
如上图
刚开始启动的时候,没有疑问,生命周期是这样的,onCreate---> onStart--->onResume;
如上图
好了,点击按钮进入BActivity ,我们可以看到,AActivity 生命周期进入onPause(注意这个时候没有接着进入onStop,非常容易出错) ,
然后BActivity 的应用程序开始启动:onCreate--->onStart--->onResume. 注意只有当BActivity完全启动了,AActivity生命周期才会进入onStop。
如上图:
这个时候,我按了一下返回键,进入AActivity
可以看到生命周期是 BActivity 生命周期进入onPause,
然后是AActivity生命周期开始调用onRestart,然后再调onStart(这一个估计很多人都会弄错,我也错过了。),再调onResume, 后面就是BActivity 的生命周期进入了onStop与 onDestory. ps: 后面无论如何点,生命周期都是这样的,如此循环。
其中有一点我也解释不了(返回来的时候,为什么是从onRestart 进入onStart,而不是直接从onRestart进入onResume),有大神路过请留言,谢谢.
这里有两点我要说明一下,
首先:返回时,onCreate方法没有调用 而是直接跳过,很多朋友都在心里觉得onCreate与onResume方法是一样的,其实不然,我们在onCreate里面创建一些组件,然后可以复用,刚才就是这个场景,onResume里面就不要做创建组件的操作了,这里面主要是网络数据更新的操作。所以onCreate与onResume还是有区别的,这就是Android程序设计的高明之处。
其次:刚才我们按了返回键后,看到了BActivity被系统回收了,这也是一种高明之处啊,他没有回收AActivity,而是把BActivity给回收了。细细体会一下,就能明白为什么要这样设计。确实有些高明了。呵呵。
续:
如果BActivity的界面是一个窗口,没有完全覆盖AACtivity
如上图,启动还是这样的:onCreate--->onStrat--->onResume,不用多说
如上图,进入BActivity 看看 首先是AActivity被onPause, 然后是BActivity调用的是OnCreate--->onStart--->onResume. 这里注意一下,与之前完全覆盖的生命周期是不一样的。
如上图,再按返回键,你会看到先把BActivity生命周期调到onPause, 然后再是AActivity直接调onResume. 这里注意一下,与之前完全覆盖后的生命周期是不一样的。
如上图
如果再点那个进入BActivity的时候,生命周期是这样的,先是AActivity调onPause,然后再就是BActivity被重新创建了一下,onCreate--->onStart--->onResume, v好了,下面的需要特别说明一下,把原来的BActivity覆盖了,之前的BActivity调用onStop,onDestory。
这里尤其要注意一下,完全覆盖与非完全覆盖的区别,流程非常容易出错。
梳理一下:
完全覆盖是这样的:
AActivity【onCreate--->onStart--->onResume】,点击进入BActivity【AActivity---》onPause, BActivity,onCreate--->onStart--->onResume, AActivty---->onStop】,然后再按返回键【BActivity--->onPause,AActivity--->onRestart--->onStart--->onResume, BActivtiy--->onStop--->onDestory】
非完全覆盖
AActivity【onCreate--->onStart--->onResume】,点击进入BActivity【AActivity---》onPause, BActivity ---->onCreate---->onStart--->onResume】,然后按返回键【BActivity--->onPause,AActivity--->onResume】如果再进入BActivity【AActivity--》onPause,BActivity--->onCreate--->onStart--->onResume,而之前的BActivity 的周期是----->onStop---->onDestory】
注意对比一下,两种状态的生命周期,
- Android 中Activity生命周期分析(二):从AActivity 到BActivity过程分析
- Android 中Activity生命周期分析:从AActivity 到BActivity过程分析
- 从Aactivity到Bactivity过程分析
- Android开发——AActivity的Fragment调转到BActivity,再从BActivity把数据传回原先的Fragment
- 从Aactivity跳转到Bactivity的指定的fragment
- Android 中Activity生命周期分析:Android中横竖屏切换时的生命周期过程
- 如何在Bactivity中调用Aactivity中的方法
- Android Activity生命周期分析
- Android Activity生命周期分析
- Android中Activity生命周期测试分析
- Android Activity的生命周期分析
- Android 深入分析Activity生命周期
- Activity 从加载布局文件到显示的过程分析
- Activity的生命周期详细分析(二)
- Android中从一个Activity跳转到另一个Activity经历的生命周期?
- Android Activity生命周期理解误区进行分析
- Android-Activity的生命周期全面分析
- Android四大组件之Activity生命周期分析
- 通俗易懂的讲解iphone视图控制器的生命周期
- 【转】android 自定义控件
- ios 开发中 developer tools access 总是要输入密码问题的解决
- Android 中Activity生命周期分析:Android中横竖屏切换时的生命周期过程
- Android 面试题(经典)
- Android 中Activity生命周期分析(二):从AActivity 到BActivity过程分析
- std::map 如何使用结构体作为自定义键值
- vs2010 MFC +win7下的程序 在win7上正常运行,XP就出错(ADO数据库连接出错)
- 转 intent常用功能
- ArcGIS教程:地理处理服务示例(选择数据)(二)
- 转 Android中进入系统设置界面
- HTML5 DOM元素类名相关操作API classList简介
- 【Gallery3D】视频暂停时与桌面切换的显示问题
- Android adb 常用技巧