前言:
本篇文章纯粹个人见解,如有错误或不到位的地方,请指出,多谢!
一般都会直接上官方生命周期图,我就不,皮一下好开心。
我先上我的效果图:
从我的效果图看出,一般的打开关闭操作。我也在每个生命周期写了一个Toast。
在我打开app的时候,依次弹出
onCreate()方法里!!
onStart()方法里!!
onResume()方法里!!
在我点击返回键,关闭app的时候,依次弹出
onPause()方法里!!
onStop()方法里!!
onDestory()方法里!!
看英文也好明显,生命周期就是
创建→开始→恢复→暂停→停止→销毁
好吧,现在再看看官方的生命周期图
对吧,一模一样。到了onResume就可以对app进行交互操作。
然后再看一张简单点的图:
那么有朋友会问,我不点返回键,我点home键或者菜单键会到生命哪个周期呢?
来,给你效果图看看:
home键的效果:
菜单键的效果:
从效果图可以看出,点击home键和菜单键会弹出
onPause()方法里!!
onStop()方法里。
然后再点回app会弹出
onRestart()方法里!!
onStart()方法里!!
onResume()方法里!!
就是说,app在栈顶的时候按Home键和菜单键
就会到生命的 onPause()和onStop()周期里。
然后重回栈顶的时候,
就会到生命的onRestart(),onStart()和onResume()周期里。
那么,这个离开栈顶的时候,用户暂时不用我们的app,
我们就应该在onStop()方法里,暂时释放一些资源(例如注销广播)。
不然,app拿这那么多内存又不用会让手机很卡的。
那么, 那我弹个提示框或者跳到其他Activity生命周期又会怎样呢?
我可以用效果图来回到你的问题。
来,效果图:
从效果图可以看出,弹出AlertDialog的时候,没有弹出提示!
但是,当我点击一个Dialog Activity的时候就弹出提示
onPause()方法里!!
然后再点击空白处回到MainActivity的时候
onResume方法里!!
同样是将MainActivity变成一种"不完全可见"的状态
弹出AlertDialog时,生命周期并没有变化!!
弹出Dialog Activity时,生命周期走到了onPause()。
顺带一提,这个Dialog Activity首先从继承 AppCompatActivity 变成 Activity
然后在manifests.xml添加android:theme="@android:style/Theme.Dialog"
如果是弹出一个普通的Activity生命周期会是 onPause() → onStop()
最后看看我的代码吧...
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity2";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(this,"在onCreate()方法里!!",Toast.LENGTH_SHORT).show();
Log.d(TAG, "onCreate: ");
Log.d(TAG, "-----------------------");
}
@Override
protected void onStart() {
super.onStart();
Toast.makeText(this,"在onStart()方法里!!",Toast.LENGTH_SHORT).show();
Log.d(TAG, "onStart: ");
Log.d(TAG, "-----------------------");
}
@Override
protected void onResume() {
super.onResume();
Toast.makeText(this,"onResume()方法里!!",Toast.LENGTH_SHORT).show();
Log.d(TAG, "onResume: ");
Log.d(TAG, "-----------------------");
}
@Override
protected void onPause() {
super.onPause();
Toast.makeText(this,"onPause()方法里!!",Toast.LENGTH_SHORT).show();
Log.d(TAG, "onPause: ");
Log.d(TAG, "-----------------------");
}
@Override
protected void onStop() {
super.onStop();
Toast.makeText(this,"onStop()方法里!!",Toast.LENGTH_SHORT).show();
Log.d(TAG, "onStop: ");
Log.d(TAG, "-----------------------");
}
@Override
protected void onRestart() {
super.onRestart();
Toast.makeText(this,"onRestart()方法里!!",Toast.LENGTH_SHORT).show();
Log.d(TAG, "onRestart: ");
Log.d(TAG, "-----------------------");
}
@Override
protected void onDestroy() {
super.onDestroy();
Toast.makeText(this,"onDestroy()方法里!!",Toast.LENGTH_SHORT).show();
Log.d(TAG, "onDestroy: ");
Log.d(TAG, "-----------------------");
}
public void myAlertDialog(View view){
new AlertDialog.Builder(this)
.setTitle("测试Dialog")
.setMessage("测试中...")
.show();
}
public void myDialogActivity(View view){
Intent i = new Intent(this, Main2Activity.class);
startActivity(i);
}
}
最后的最后,我发现一个问题!
先上效果图:
问题版本:
正常版本:
对比两个效果图,可以发现在onStop()提示消失前销毁app,会弹出onDestory()方法里的提示。
但是,在onStop()方法里!! 提示消失后,再销毁app,就不会弹出onDestory()方法里!! 的提示!!!
是不是说,已经app离开久了,这样强制销毁,app是不会走到 onDestory()的生命周期?
大神们,如果你们还在看的话,帮帮我解答这个问题。谢谢。
Thanks:
以上部分内容摘取自以下网址: