5

Activity的生命周期以及两个Activity跳转时的状态变化

 2 years ago
source link: https://blog.yuantops.com/tech/android-activity-lifecycle-with-two-activites/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Activity的生命周期以及两个Activity跳转时的状态变化

##Android Activity的生命周期 下面这张图非常清晰地介绍了Activity的生命周期:
Activity Lifecycle

##当通过intent跳转时的状态变化 一个Activity的状态有三个:Stopped(存在但看不见),Paused(部分可见,但无焦点),Resumed(激活状态,拥有焦点,可以与之交互)。如果将不存在也算作一个状态,那样一共就有四个状态。

这篇文章非常详细地讨论了当通过intent在一个Activity中启动另一个Activity时,它们两个Activity的状态变化过程。

当由MainActivity跳转到ActivityTwo时,下面是方法的调用顺序:

    MainActivity: onPause()     
ActivityTwo: onCreate()     
ActivityTwo: onStart()     
ActivityTwo: onResume()     
MainActivity: onStop()     

步骤为:MainActivity失去焦点,转到Paused状态->ActivityTwo新建但不可见,处于Stopped状态->ActivityTwo可见,处于Paused状态->ActivityTwo获得焦点,处于Resumed状态->MainActivity不可见,处于Stopped状态。

值得注意的是,当ActivityTwo位于前台时,MainActivity并没有被销毁,而是仍保存在内存中。

按下后退键,由ActivityTwo返回MainActivity时,方法的调用顺序为:

    ActivityTwo: onPause()     
MainActivity: onRestart()     
MainActivity: onStart()     
MainActivity: onResume()     
ActivityTwo: onStop()     
ActivityTwo: onDestroy()   

步骤与上一步类似。值得注意之处有二:

  • 其一,MainActivity.onRestart方法先于MainActivity.onStart方法调用。如果Activity不是从无到有新建出来的,那么在onStart方法前都会先调用onRestart方法。
  • 其二,ActivityTwo被销毁了。至于为什么此时ActivityTwo会被销毁,涉及到Task的原理。在这篇文章中有介绍。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK