activity的生命周期

来源:互联网 发布:sqlserver 2005 dev 编辑:程序博客网 时间:2024/05/18 10:23

activity的生命周期分为典型情况和异常情况。
一.典型情况下生命周期的分析:
1)onCreate:表示activity正在创建,是第一个方法;一般在这个方法中我们做一些初始化工作,如加载界面布局资源;
2)onRestart:表示activity正在重新启动;
3)onStart:表示activity正在被启动,activity已经可见了,但是还没出现在前台,无法和用户交互;
4)onResume:表示activity已经可见了,并且出现在前台开始活动;注意和onStart( )方法的比较;
5)onPause:表示activity正在暂停,onStop将要执行;
6)onStop:表示activity即将停止;
7)onDestroy:表示activity即将被销毁,在此我们可以做一些回收工作,和最终的资源释放;
activity生命周期图:
这里写图片描述

问题:假设当前A(activity),打开一个新的B(activity),A的onPause和B的onResume哪个先执行呢?
下面我们来用代码测试下:

package com.example.test;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;public class MainActivity extends Activity {    private final static String TAG = "MainActivity";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    @Override    protected void onPause() {        super.onPause();        Log.d(TAG, "onPause----");    }    public void onBtClick(View view){        Intent intent = new Intent(this, SecondActivity.class);        startActivity(intent);    }}B(activity)package com.example.test;import android.app.Activity;import android.os.Bundle;import android.util.Log;public class SecondActivity extends Activity {    private final static String TAG = "SecondActivity";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_second);    }    @Override    protected void onResume() {        super.onResume();        Log.d(TAG, "onResume()----");    }}

测试结果如下:
12-08 09:02:35.699: D/MainActivity(1510): onPause—-
12-08 09:02:35.931: I/Choreographer(1510): Skipped 80 frames! The application may be doing too much work on its main thread.
12-08 09:02:36.940: D/SecondActivity(1510): onResume()—-
12-08 09:02:37.231: I/Choreographer(1510): Skipped 333 frames! The application may be doing too much work on its main thread.

可知先执行A(activity)的onPause,后执行B(activity)的onResume;

二.异常情况下生命周期的分析:
1.情况1:资源相关的系统配置发生改变导致activity被杀死并重新创建。

由于异常情况下终止的,系统会调用onSaveInstanceState来保存当前activity的状态。它既可能发生在onPause之前,也可能发生在onPause之后。
当activity被重建的时候,系统会调用onRestoreInstanceState,把之前onSaveInstanceState保存的Bundle对象作为参数同时传递给onRestoreInstanceState和onCreate方法。

2.情况2:资源内存不足,导致低优先级的activity被杀死

1)前台activity——-正在和用户交互的activity,优先级最高;
2)可见但非前台的activity——–比如activity弹出一个对话框;
3)后台activity——-已经被暂停的activity,比如执行了onStop,优先级最低。

0 0
原创粉丝点击