android ——活动的生命周期
在其生命周期内,activity在运行、暂停和停止三种可能的状态间进行转换,不同状态之间互相转换的时候的调用不同的方法,重写这些方法就能在活动切换,被销毁时保存或传输数据,在被启动、被切换出来时接收数据。或是完成其他一些工作。
然后是一个简单的demo,拥有两个活动,主活动中有一个启动第二个活动的按钮,第二个活动中有返回第一个很活动的按钮。
public class MainActivity extends AppCompatActivity { // 在完整生存期开始时调用 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);//加载布局 Log.d("MainActivity","onCreate"); Button button1 = (Button) findViewById(R.id.button1); Button button2 = (Button) findViewById(R.id.button2); //启动第二个活动 button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); } }); //销毁当前活动 button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); } //由不可见转换为可见时调用 @Override protected void onStart() { super.onStart(); Log.d("MainActivity","onStart()"); } //由可见转换为不可见时调用 @Override protected void onStop() { super.onStop(); Log.d("MainActivity","onStop()"); } //离开前台,但不是完全不可见 @Override protected void onPause() { super.onPause(); Log.d("MainActivity","onPause()"); } //返回前台,准备好和用户交易 @Override protected void onResume() { super.onResume(); Log.d("MainActivity","onResume()"); } //重启处于停止状态的活动时对用 @Override protected void onRestart() { super.onRestart(); Log.d("MainActivity","onRestart()"); } // 在完整生存期结束时调用 @Override protected void onDestroy() { // 清空所有的资源,包括结束线程、关闭数据库连接等。 super.onDestroy(); Log.d("MainActivity","onDestroy"); } }
每个方法中都会有一个该方法名字的打印。
首先是第一次启动活动,
先出现了onCreate onStart、onResume(创建->启动->运行)方法
点击按钮启动第二个活动
点击第二个活动的按钮,启动第一个活动
点击销毁按钮,调用finish方法销毁第一个活动
这时第二个活动会被打开,也就是说活动再相互被启动的时候,不会被销毁,onDestory()不会被调用,这时点击返回,
由会启动第一个活动,然后并没有调用onCreate()方法,这就说明刚刚销毁的活动不是这个活动,回想一下刚刚的整体过程就是,一开始打开启动的MainActivity启动了SecondActivity,然后SecondActivity通过Intent启动的MainActivity和刚开始那个MainActivity并不是同一个,当SecondActivity通过Intent启动的MainActivity的时候,栈中一共有三个活动,该开始启动的MainActivity和SecondActivity处在停止状态,MainActivity处于栈底,所以销毁掉栈顶的MainActivity后SecondActivity就被重启。
销毁栈顶的MainActivity,在SecondActivity点击返回后,打开了最开始的MainActivity,这时点击home键回到桌面
这里可以看到,只有是活动变得完全不可见,无论是启动了其他活动,还是返回桌面都会出现onPause、onStop(暂停->停止)方法。