【Android开发】Activity的生命周期及其运用

合理地管理Activity的生命周期,在适当的时候,做适当的事情,能极大地提高用户体验,也能避免用户在使用你的APP的时候接了个电话什么的可能就崩溃了。在这里博主总结了一些关键的笔记:
参考官网资料http://developer.android.com/guide/components/activities.html 官网的Activity的生命周期图(这个最直观了):

activity_lifecycle

各个方法调用的场景和适合做的任务:

onCreate()

  • 当一个Activity第一次创建的时候调用,这个生命周期中唯一必须要在子类实现的,在这里主要的工作是初始化重要的组件和数据,还可以从方法的参数中恢复已保存的数据(如果此前Activity停止时被系统回收),在这里必须要调用setContentView()来限定该Activity的界面布局。
  • 在运行期,当用户设备的界面属性改变时(比如横屏和竖屏切换,输入发键盘出现等),系统会调用onDestroy(),然后马上调用onCreate(),这个时候的任务当然是做一些适应屏幕的事情,比如改变布局,让Activity更具弹性和强壮性,避免一些不可预料的结果。

onRestart()

 

  • 第一次创建Activity时并不调用,Activity停止后再启动时调用,一般很少用到,在这里面主要的任务是一些比较特殊的需求,比如onStop()调用之后引发的代码可以在这里做相应的操作。 

 

onStart()

  • 该方法调用后, Activity的界面就可见了。在这里适合进行一些对UI有影响的操作,比如启动动画,注册广播接收器,还有重启在onStop()里释放的资源。 

 

onResume()

  • onStart()方法调用后接着调用该方法,此时Activity就可以和用户互动和接受输入了,在这里的任务通常是Activity暂停后的恢复。一个Activity生命周期中通常会多次在onResume()和onPause()之间切换,所以这两个方法尽量里的代码尽量轻量级,使界面能够快速切换。  

onPause() 

  • 当Activity失去用户焦点时调用,例如用户切换到其他APP,或者界面被另一个窗口覆盖,比如一个半透明的窗口或者对话框,此时还能看的该Activity的部分界面。在这里的任务主要是有选择地保存一些未保存的数据(比如用户的草稿,用户可能不再切换回来了),之所以有选择地是因为尽量要让该方法轻量级,不影响用户切换界面时的体验。停止消耗资源的活动,例如释放麦克风、停止动画、停止音乐或停止播放视频等。该方法调用后,Activity在系统内存非常不足的时候有可能被系统终结。   

 

onStop()

  • 界面彻底不可见时,该方法会被调用,可能是因为该Activity要被销毁,也可能是被另外一个界面完全覆盖了,例如来电话。接下来调用的要么onRestart()进行恢复,要么是onDestroy()进行销毁。这个时候,适合释放比较大的对象资源,比如释放网络连接和数据库连接,保存重要的数据到存储卡中,因为在系统任何需要内存的时候都有可能销毁该Activity。 

onDestroy()

  • Activity生命周期结束时最后调用的一个方法,当你调用finish()时会调用该方法,或者系统销毁该实例回收内存,此时整个Activity终结。这个方法里适合做的任务是释放剩余的资源避免内存泄漏,结束还在运行的线程等,不适合在这里保存数据。   

 

几点需要注意的是:

  • 生命周期里的每个方法都要调用父类的本方法。像这样

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

  • 如果要在一个Activity里保存数据到数据库给另外一个Activity使用,应该在onPause()时就保存,不应该在onStop()。

发表评论

电子邮件地址不会被公开。 必填项已用*标注