Activity创建与销毁(2)

    xiaoxiao2021-03-25  88

    异常情况下的生命周期

    系统配置发生改变导致Activity被KILL

    在类似旋转屏幕动作等异常情况下,Activity会被销毁后重建。

    在销毁的时候onPause onStop onDestory 都会被调用,而且系统会在onStop之前调用onSaveInstanceState来保存当前的Activity,我们可以在这个方法中保存一些有用的数据。

    重建之后,系统会调用onRestoreInstanceState,把之前保存的Bundle对象作为参数传递给onRestoreInstanceState和onCreate我们就可以取出之前保存的数据并恢复。

    同时onSaveInstanceState ,onRestoreInstanceState中,系统自动为我们恢复了了一些数据,比如视图结构,listview的滚动位置,等。。。每一个View都有这两个方法。可以查看源码。


    活动被回收前 数据的保存与恢复

    常见问题,活动onStop()->app process killed->onCreate(),切回上一个Activity发现由于被回收过,导致之前的数据丢失。。。

    Activity中加入OnSaveInstanceState(Bundle参数)回调方法,会保证在回收前调用,可以保存数据,Bundle参数.putString(“key”,value);

    然后在onCreate()中加入恢复数据方法 Bundle参数.getString(“key”);

    资源不足导致的优先级低的被杀死

    前台可见后台 内存不足的时候,就会从优先级别低的Activity开始杀死其进程。所以后台应该在service中运行,而尽量避免被杀死。

    那么如何避免被销毁重建呢? 在AndroidMenifest.xml中activity标签内的configChanges属性中选择某些值。代表在这个时候不会重建,比如android:configChanges="orientation|screensize" android:configChanges="locale"//系统本地位置发生了变化,一般指系统切换了语言 android:configChanges="keyboardHidden" 然后在Activity的onConfugChanged方法中去处理系统配置的变化。

    转载请注明原文地址: https://ju.6miu.com/read-23598.html

    最新回复(0)