activity小总结

来源:互联网 发布:秃用一体握把淘宝 编辑:程序博客网 时间:2024/04/30 16:08

activity 的7个方法,4种状态,3个循环

7个方法,onCreate()–> onStart()–> onResume()–> onPause()–>onStop()–> onDestroy().—>onRestart();
一般在onCreate中进行布局的加载,控件的绑定;在onDestroy中进行内存的释放;

onStart方法,执行后,界面可见,onResume方法执行后,可以和用户进行界面的交互,如果界面被部分遮挡,比如弹出了一个弹窗,此时,只会执行onPause而不会执行onStop,只有当界面被完全遮挡的时候,才会执行onStop。如果销毁了页面,就会执行onDestroy,如果手机内存不够了,会开始回收内存,回收执行了onDestroy的页面,如果内存还是不足,会继续回收,执行了onStop方法的页面,如果还是不足,会继续回收优先级更低一点的页面。

在onPause中会释放掉消耗CPU的资源,保存一些关键性数据,但是这些操作一定要快,因为执行了onPause系统就准备去启动或者恢复另一个活动了,操作慢,会印象到新的栈顶活动的使用;

如果一个页面执行了onStop,但是还没有执行onDestroy,此时又重新启动该页面,此时,会执行onRestart方法,然后执行onStart方法,重新显示页面;如果已经执行了onDestroy那绘制的页面已经被销毁了,重新启动,就需要重新绘制,就是说,需要重新从onCreate开始向下执行;

4种状态:运行状态,暂停状态,停止状态,销毁状态,

3个循环,完整生命周期循环(7个完整方法);可见生命周期循环(onStart–>onstop的循环,在onStart中进行数据的加载,在onStop中进行资源的释放);前台生命周期循环(onresume–>onPause)

当一个活动,执行了onCreate之后,如果没有被回收,则当前活动的相应的状态和成员变量都会被保留下来,如果,此时手机内存不足了,这个活动被系统回收掉了,当我们重新按下回退按钮,依然会见到这个活动,但是它是执行了onCreate重新创建的,之前的那个活动已经销毁了,它的那些成员变量,当然肯定不存在了,
这样的用户体验就很不好啊,比如一个输入编辑内容页面,跳转到其他页面一下,再回来,之前编辑的内容都没有了,这就造成了很不好的用户体验。

解决办法

我们知道,onCreate和onScedInstancedState()方法都有一个bundle类型的参数的。在onScedInstancedState中,把零时数据可以保存进去,然后再重新onCreate创建时候取出来。

重写onSavedInstanceState()这个方法,在这个方法中,将数据保存进bundle中,这个方法保证,一定会在活动被回收之前调用,因此,可以使用这个方法,来解决活动被回收时零时数据得不到保存的问题。
之后,在onCreate中判断,如果bundle不为空就取出保存进去的零时数据,重新写入页面,

代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity2);
if(savedInstanceState!=null){
//取出保存进bundle的零时数据
}
}

@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
//保存零时数据进bundle
}

0 0
原创粉丝点击