Android活动生命周期介绍

示例

假定具有MainActivity的应用程序可以通过单击按钮来调用Next Activity。

public class MainActivity extends AppCompatActivity {

    private final String LOG_TAG = MainActivity.class.getSimpleName();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(LOG_TAG, "calling onCreate from MainActivity");
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.d(LOG_TAG, "calling onStart from MainActivity");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.d(LOG_TAG, "calling onResume  from MainActivity");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(LOG_TAG, "calling onPause  from MainActivity");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(LOG_TAG, "calling onStop  from MainActivity");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(LOG_TAG, "calling onDestroy  from MainActivity");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(LOG_TAG, "calling onRestart  from MainActivity");
    }
    public void toNextActivity(){
        Log.d(LOG_TAG, "calling Next Activity");
        Intent intent = new Intent(this, NextActivity.class);
        startActivity(intent);
    } }

public class NextActivity extends AppCompatActivity {
    private final String LOG_TAG = NextActivity.class.getSimpleName();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_next);
        Log.d(LOG_TAG, "calling onCreate from Next Activity");
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.d(LOG_TAG, "calling onStart from Next Activity");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.d(LOG_TAG, "calling onResume  from Next Activity");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(LOG_TAG, "calling onPause  from Next Activity");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(LOG_TAG, "calling onStop  from Next Activity");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(LOG_TAG, "calling onDestroy  from Next Activity");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(LOG_TAG, "calling onRestart  from Next Activity");
    } }

在首次创建应用程序
d / MainActivity:从主叫MainActivity的onCreate
d / MainActivity:从主叫MainActivity调用onStart
d / MainActivity:从主叫MainActivity的onResume
被称为

屏幕休眠时
08:11:03.142 D / MainActivity:从MainActivity调用onPause
08:11:03.192 D / MainActivity:从MainActivity调用onStop
。并再次当它醒来
08:11:55.922 d / MainActivity:从MainActivity调用onRestart
08:11:55.962 d / MainActivity:从MainActivity调用在onStart
11:55.962 d / MainActivity:08从MainActivity调用的onResume
被称为

情况1:当从主活动
D / MainActivity调用下一个活动:调用下一个活动
D / MainActivity:从主活动D /
NextActivity调用onPause:从下一个活动
D / NextActivity调用onCreate:从下一个活动D / NextActivity调用onStart
:从下一活动
D / MainActivity:从MainActivity调用onStop

当使用返回按钮
D / NextActivity从下一个活动返回主活动时:从下一个活动
D / MainActivity调用onPause :从MainActivity
D / MainActivity调用onRestart:从MainActivity D / MainActivity调用onStart
:从MainActivity
D / NextActivity调用onResume :从下一个活动
D / NextActivity调用onStop:从下一个活动调用onDestroy

情况2:当“活动”被部分遮盖(按“概览”按钮时)或当应用程序进入后台并且另一个应用程序完全遮盖它时
D / MainActivity:从MainActivity调用onPause
D / MainActivity:从MainActivity调用onStop
且应用返回前景准备接受用户输入,
d / MainActivity:从主叫MainActivity onRestart
d / MainActivity:从主叫MainActivity调用onStart
d / MainActivity:从主叫MainActivity的onResume
被称为

情况3:当一个活动被调用以实现隐式意图并且用户做出选择时。例如,当按下共享按钮时,用户必须从显示的应用程序列表中选择一个应用程序
D / MainActivity:从MainActivity调用onPause

活动可见,但现在不活动。当选择完成和应用处于活动状态
d / MainActivity:从MainActivity调用的onResume
被称为

案例4:
当应用程序在中被杀死时background(to free resources for another foreground app), onPause(用于蜂窝前设备)或onStop(用于蜂窝设备)将是终止该应用程序之前的最后一次调用。

每次运行应用程序时,将最多一次调用onCreate和onDestroy。但是在生命周期中可能会多次调用onPause,onStop,onRestart,onStart,onResume。