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】

 

注意对比一下,两种状态的生命周期,

 

 

 

 

0 0
原创粉丝点击