Activity类中定义了7个回调方法,覆盖了活动生命周期的每一个环节。
为了测试一个活动的生命周期流程,我编写了一个测试代码。
package com.studio.androidlifestyledemo;
import android.content.Intent;
import android.nfc.Tag;
import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("life", "onCreate: ");
}
@Override
protected void onStart()
{
super.onStart();
Log.d("life", "onStart: ");
}
@Override
protected void onResume()
{
super.onResume();
Log.d("life", "onResume: ");
}
@Override
protected void onPause()
{
super.onPause();
Log.d("life", "onPause: ");
}
@Override
protected void onStop()
{
super.onStop();
Log.d("life", "onStop: ");
}
@Override
protected void onRestart()
{
super.onRestart();
Log.d("life", "onRestart: ");
}
@Override
protected void onDestroy()
{
super.onDestroy();
Log.d("life", "onDestroy: ");
}
}
运行模拟器执行代码后,观察LogCat中的日志如下
由此可见,当一个Activity可见时,会经历三个环节,onCreat创建,onStart打开,onResume实现交互。
之后我们再点击返回键关闭Activity,观察LogCat中的日志如下
由此可见当一个Activity被关闭时,会经历三个环节onPause,onStop和onDestroy
那么之后我们再试着从MainActivity中打开另外一个SecondActivity,观察LogCat日志
package com.studio.androidlifestyledemo;
import android.content.Intent;
import android.nfc.Tag;
import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity
{
private Button btn_startAcivity;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("life", "onCreate: ");
initView();
setListener();
}
private void setListener()
{
btn_startAcivity.setOnClickListener(new ButtonListener());
}
private void initView()
{
btn_startAcivity= (Button) findViewById(R.id.btn_newActivity);
}
class ButtonListener implements View.OnClickListener
{
@Override
public void onClick(View v)
{
switch(v.getId())
{
case R.id.btn_newActivity:
{
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
break;
}
}
}
}
@Override
protected void onStart()
{
super.onStart();
Log.d("life", "onStart: ");
}
@Override
protected void onResume()
{
super.onResume();
Log.d("life", "onResume: ");
}
@Override
protected void onPause()
{
super.onPause();
Log.d("life", "onPause: ");
}
@Override
protected void onStop()
{
super.onStop();
Log.d("life", "onStop: ");
}
@Override
protected void onRestart()
{
super.onRestart();
Log.d("life", "onRestart: ");
}
@Override
protected void onDestroy()
{
super.onDestroy();
Log.d("life", "onDestroy: ");
}
/**
* 按下Android返回键时触发的监听事件
*/
@Override
public void onBackPressed()
{
super.onBackPressed();
Log.d("life", "onBackPressed: ");
}
}
首先我们运行代码,这时打开的是第一个MainActivity,LogCat日志中依然和之前一样
此时,我们点击MainActvity中的Button按钮跳转到SecondActivity
这时LogCat新出现了五条日志,第一个onPause指的是MainActivity进入的生命周期环节(编写测试代码的时候没有注意,不小心将打印MainActivity生命周期环节的Log标签和SecondActivity的都设置成life了),之后的onCreat,onStart,onResume指的就是SecondActivity经历的生命周期环节,最后的onStop又是MainActivity经历的环节。由此可见,当一个新的Activity覆盖了原来Activity的时候,原来的Activity先经历onPause,然后新Activity经历一个完整的onCreat,onStart,onResume过程变为可见状态,这时原来的Activity就完全进入了不可见状态,因此最后经历onStop。
之后我们再按下返回键返回MainActivity,观察日志变化
我们可以发现第一条日志是我们点击返回键触发的一个打印log的监听事件,第二条onPause指的是SecondActivity经历的环节,然后MainActivity将经历onRestart->onStart->onResume的环节,最后SecondActivity经历onStop和onDestroy被销毁。