谨以文章记录学习历程,如有错误还请指明。
Activity生命周期
首先放上Google Develop Guides中的Activity完整的生命周期示意图:
回调初步解读
onCreate()
:创建活动时调用。onStart()
:当活动进入可见状态时调用,使得活动可见但不可与用户交互。onResume()
:活动进入前台时调用,可与用户交互。onPause()
:活动不持有用户焦点但依然可见时调用。活动仍可见,但停止与用户交互,比如弹窗,锁屏等onStop()
:活动不可见时调用onDestroy()
:活动退出,被销毁时调用onRestart()
:活动由不可见重新返回前台时调用。依次调用onRestart()
->onStart()
->onResume()
回调方法中进行的操作
onCreate()
:在这个方法中,执行基本的应用程序启动逻辑,这种逻辑应该只在活动的整个生命周期中发生一次。如将数据绑定到ListView
,声明范围变量等。同时该方法接收一个savedInstanceState
参数,是用来恢复之前保存过状态的Bundle
对象。后面我们会介绍。onStart()
:该方法中初始化维护UI的组件,如注册一个监听UI变化的广播。onResume()
:在这个方法中,应该初始化在onPause()
中释放的组件,如初始化camera
,同时执行活动每次进入前台时候都需要的初始化操作,如开始动画与初始化哪些只有在获取用户焦点时才需要得到组件,如上下文菜单。onPause()
:释放系统资源,例如广播接收器、处理传感器(如GPS
)或任何可能影响电池寿命的资源。onStop()
:释放几乎所有不需要的资源,如上述onStart()
中创建的广播,同时在此方法中执行耗时的释放资源的操作,如保存数据,网络调用,数据库事务等。同时很重要的一点,需要在此方法中释放可能导致内存泄漏的资源,因为系统因为内存紧张而杀死活动进程时,不会调用最后的onDestroy()
方法。onDestroy()
:释放在onCreate()
中初始化的活动所能使用的全局资源。在任何一个生命周期回调方法中调用
finish()
方法时,系统会直接调用onDestroy()
方法,而跳过这之前的所有回调过程。onRestart()
:由于onStart()
的存在,这个方法好像没什么使用场景。
为什么在onStop()
中释放耗时资源而不是在onPause()
中?
原因:在两个Activity A,B中,当从A中startAct