安卓生命周期的理解
以页面跳转为例:
在页面A加上一个按钮,然后给按钮添加一个监听器方法,点击此按钮,实现跳转到B页面。
每个activity都有它的生命周期:存在栈
栈:先进后出(入栈,出栈)
就是说先存进去的最后出来,最后进去的先取出来,存储方式跟数组队列不一样
例中有两个activity:A,B,当启动程序时,首先会启动A,栈中先存入activity A,点击按钮后,会进入第二个页面B,栈中会存入activity B,如果再点击虚拟机上的返回键时,页面会重新回到页面A。那么栈中会发生什么呢、?栈中会把activityB移除出,再按一次返回键时,activity A也会被移出,此时,栈中已没有activity,那么进程呢?进程会不会停止?实际上,此时进程还是会存在的,这跟安卓手机上的很多应用相似,表面上你已经退出了,但是程序还在后台运行,长按home键就可以看到,就是说它的进程还在。所以说,栈中只是在管理activity,跟进程无关。
安卓生命周期: 七个阶段:
三个节点:运行,暂停停止,销毁
运行:
protected void onCreate(Bundle savedInstanceState);创建
protected void onStart();启动
protected void onResume();可以跟用户交互,此时的activity在栈的顶部,总是在暂停之后
暂停停止:
protected void onPause();暂停
protected void onStop();停止
protected void onRestart();重新启动
销毁:
protected void onDestroy();销毁
运行程序的顺序:
刚开始运行时,第一阶段:运行—>执行了三个方法:
onCreate创建
onStart启动
onResume();可以跟用户交互,此时的activity在栈的顶部,总是在暂停之后
当点击按钮,进入B页面后,B activity在栈顶端了
第二阶段--执行了五个方法
A onPause();暂停
B onCreate创建
onStart启动
onResume();可以跟用户交互,
A onStop();停止
点击返回键后,页面重新跳转到A页面
第三阶段---执行了六个方法
B onPause();暂停
A onRestart();重新启动
onStart启动
onResume();可以跟用户交互,
B onStop();停止,但不一定会销毁,如果内存不足了,页面就会被销毁
第三阶段
B onDestroy();销毁
若A的activity调用了finish方法,
那么在点击了按钮进入B页面后,
执行了A停止后,又执行了销毁方法,完成了A的生命周期
比如说在登陆以后就不再需要登录界面了,所以可以让它销毁