[转载]Android 中Activity生命周期分析:Android中横竖屏切换时的生命周期过程 - king-Android,IPhone - 博客园

[转载]Android 中Activity生命周期分析:Android中横竖屏切换时的生命周期过程 – king-Android,IPhone – 博客园.

最近在面试Android,今天出了一个这样的题目,即如题:

 

我当时以为生命周期是这样的:

onCreate –》 onStart — —》 onResume —》 onPause —》 onStop —》 onRestart —》 onResume —》 onPause —》 onStop

 

回家后我自己在电脑上重新演示了一下,得出了另外的结果,果然是实践出真知啊。 好了,先上代码,给有需要的朋友直接贴代码:

复制代码
package com.king.review.base;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

/**
 * 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);

        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 ...");
    }

}
复制代码

既然谈到了Activity问题,那我就完整的来弄一下。

首先程序启动的时候,打印出的log:

10-08 20:32:52.231: I/ActivityLife(1188): onCreate …
10-08 20:32:52.251: I/ActivityLife(1188): onStart …
10-08 20:32:52.251: I/ActivityLife(1188): onResume …

 

即流程是onCreate —>onStart—>onResume.

 

点返回按钮的时候,打印的log:

10-08 20:33:49.282: I/ActivityLife(1188): onPause …
10-08 20:33:50.401: I/ActivityLife(1188): onStop …
10-08 20:33:50.401: I/ActivityLife(1188): onDestory …

流程是:onPause—>onStop—>onDestory

 

综上一个正常的流程就是 :onCreate —>onStart—>onResume–》onPause—>onStop—>onDestory

 

 

再来说说横竖屏切换时的生命周期:

首先启动时:

10-08 20:46:43.811: I/ActivityLife(1188): onCreate …
10-08 20:46:43.831: I/ActivityLife(1188): onStart …
10-08 20:46:43.831: I/ActivityLife(1188): onResume …

生命周期是这样的:onCreate—>onStart—>onResume.

 

然后切换一下:

10-08 20:47:56.551: I/ActivityLife(1188): onPause …
10-08 20:47:56.561: I/ActivityLife(1188): onStop …
10-08 20:47:56.561: I/ActivityLife(1188): onDestory …
10-08 20:47:56.631: I/ActivityLife(1188): onCreate …
10-08 20:47:56.631: I/ActivityLife(1188): onStart …
10-08 20:47:56.651: I/ActivityLife(1188): onResume …

生命周期是这样的:onPause–>onStop—>onDestory—>onCreate—>onStart—>onResume;

 

然后再切换一下屏幕:

10-08 20:49:24.601: I/ActivityLife(1188): onPause …
10-08 20:49:24.601: I/ActivityLife(1188): onStop …
10-08 20:49:24.601: I/ActivityLife(1188): onDestory …
10-08 20:49:24.621: I/ActivityLife(1188): onCreate …
10-08 20:49:24.631: I/ActivityLife(1188): onStart …
10-08 20:49:24.631: I/ActivityLife(1188): onResume …

生命周期是这样:onPause—>onStop—》onDestory—》onCreate—>onStart—>onResume;

 

综上:Android中横竖屏切换时的生命周期是这样的:

onCreate—>onStart—>onResume.–》 onPause—>onStop—》 onDestory—>onCreate—>onCreate—>onStart—>onResume;

onCreate –》 onStart — —》 onResume —》 onPause —》 onStop —》 onRestart —》 onResume —》 onPause —》 onStop

在这里特别要注意一下,当屏幕切换的时候,之前那个屏幕状态就已经销毁了(onDestory),然后在新的屏幕中重新开始一个生命周期:(onCreate–>onStart—>onResume)

 

我犯的错误是,以为之前屏幕生命周期被挂载起来了,然后再重新启动(onRestart)。。。 这种问题比较常见,正好和小伙伴能共享一下。

 

 

 

有些东西会,但不精通,而我现在要做的就是精通,复习回顾,整理自己的框架,举一反三。。。
赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏