现在的位置: 首页 > 综合 > 正文

Android 之 Activity 生命周期

2013年07月19日 ⁄ 综合 ⁄ 共 1900字 ⁄ 字号 评论关闭

    Android应用程序有一个特殊的概念:应用程序的生命周期。这个问题,大部分人都会轻视,然后等在这里跌倒了,才会回头看看,我就是这样的一个人。但亡羊补牢,犹未晚矣!

    下面的这部分讲的很简单,但是请注意千万记住了。应用程序的生命周期严重的影响了系统资源以及提高用户体验直观重要。

 

   1:Activity栈:

   Android系统中,所有的Activity被保存在Activity栈中。当启动一个新的Activity时,那么这个Activity就会被压入Activity栈顶部。

如果用户通过“返回”键回到上面一个Activity的画面。那么栈顶的Activity就会被弹出。之前位于栈顶的第二个Activity就变成新的栈顶Activity.并显示在屏幕上。

 

    一点补充:当按了Return后,就会调用OnPause().OnStop(),OnDestroy().你如果是按Home,就不会执行OnDestroy。

 

 

  2:Activity的状态:活跃;暂停;结束;销毁或为启动;

 

  活跃:当一个Activity位于Activity栈顶部。

  暂停:可见,但是没有焦点。

  结束:当Activity所显示的用户界面在屏幕上不可见。

  销毁或未启动:当Activity彻底借宿或者关闭后。它的状态就变成非活跃状态。这时,Activity已经从Activity栈中移除。

 

  补充:当我们按“返回”时,会依次变成:暂停,停止,销毁。

  当我们按“Home”时,依次暂停,停止。

 

  3:下面我们做一个ActivityLifeDemo来测试,利用Logcat 来打印。

 

   Logcat的使用很简单。Logcat.i("Rocky","OnCreate");

 

利用adb shell 工具查看。如果是上面的格式,则在adb shell里面输入:

logcat -s Rocky I

即可查看我们的打印信息。

 

重写Activity的一下代码段:

  OnCreate();

  OnResume();

  OnStart();

  OnRestart();

  OnPuase();

  OnStop();

  OnDestroy();

 

 

下面,我们进行一下操作看看它的打印信息:

  第一次打开Activity:OnCreate ,OnStart,OnResume

  按返回键: OnPause,OnStop,OnDestroy

 

   重新打开Activity:    OnCreate ,OnStart,OnResume

   按Home键:OnPause,OnStop

   此时Activity不可见了。通过再次打开Activity:

  OnRestart,OnStart,OnResume

 

   这个打印信息提醒我们,不要在OnCreate里面做一初始化的动作。有些动作应该放在OnStart(),OnResume里面。他们对于的是OnPuase,OnStop函数。

    这个时候,我们再点击返回键:会出现OnPause,OnStop,OnDestroy.

 

  以上的这些东西是我们通过实际测试数据得到的。

 

 

  4:Activity完整的生命周期:

  通过上面可以看见,在Activity按Home键的时候,程序不见了,但是生命周期没有完。

 

   所以完整的程序的生命周期是:

   从OnCreate创建Activity到OnDestroy回收Activity的过程。

 

   5:可见的Activity的生命周期:

   什么周期的过程中,有些时候我们是看不见的。这个时候要注意了,程序没有被关闭。所以你需要注意。本人就是因为这个错误,才写了这篇日记来记录自己的错误。

   可见:OnStart 到OnStop之间。

   有焦点:OnResume 到OnPause之间。

 

   在OnStop方法中,我们应当暂停或者结束动画,线程,定时器服务等这些用来更新用户界面的资源。Activity变成Invisible时,这些资源的更新没有任何意思反而会增加系统消耗。

   正确的方法是当UI变的可见之后,调用OnStart或者OnRestart方法继续或者重启Activity的这些资源。

 

   OnStart()和OnStop也被用于注册、取消注册BroadcastReceiver.

 

 

   6:OnSaveInstanceState()是为了保持用户的界面信息到Bundle中。会在OnPause之前调用。这样下次Activity变得活跃的时候呈现和上次一样的用户界面。

 

 

   7:这篇文件的内容我也迷迷糊糊的看过很多次,但是碰见问题还是了犯了错误。唯有自己亲自动手试试,才能是自己的。

 

 

 

 

 

 

 

 

 

抱歉!评论已关闭.