设为首页收藏本站

Scripts 学盟

 找回密码
 加入学盟

QQ登录

只需一步,快速开始

查看: 1715|回复: 2
打印 上一主题 下一主题

Android (四) Activity 生命周期 [复制链接]

Rank: 8Rank: 8

跳转到指定楼层
1#
那个谁 发表于 2011-5-16 09:14:09 |只看该作者 |倒序浏览
Activit简介

        要为你的OPhone应用程序创建用户界面屏幕,就需要继承Activity类,并且使用Views为你的应用程序提供用户交互。每个Activity表示用户界面中的一个屏幕。你的应用程序越复杂,需要的屏就越多,每一屏都是一个新的Activity。典型的一个应用程序一般至少包括一个屏用来处理用户界面的主要功能,也常常还有其他的屏用来输入用户信息,或者展现不同的数据并支持更多的功能。大多数Activity都是全屏的,但是你也可以创建半透明或者浮动的Activity。(作者:张金云)


创建一个Activity
        通过继承Activity类,我们可以创建一个新的Activity。基本的示例代码如下所示,
  1. 01.package com.borqs.myapplication;   
  2. 02.import android.app.Activity;   
  3. 03.import android.os.Bundle;   
  4. 04.  
  5. 05.public class MyActivity extends Activity {   
  6. 06.  
  7. 07./** Called when the activity is first created. */  
  8. 08.@Override  
  9. 09.public void onCreate(Bundle icicle) {   
  10. 10.super.onCreate(icicle);   
  11. 11.}   
  12. 12.}  
复制代码
Activity基类仅仅是一个封装了一些与窗口显示相关功能的空空的屏幕,本身并不具备太具体用处,因此创建Activity以后,第一件事情就是在这个空空的屏幕上摆上你所需要的物件,各种Views。你可以在xml文件中的定义你所需要的Views, 也可以在代码中定义。通过在Acitvity onCreate方法中调用setContentView,便可将Activity与你的Views绑定在一起来实现用户交互的功能。
  1. 01.在代码中定义你的Views   
  2. 02.       @Override  
  3. 03.       public void onCreate(Bundle icicle) {   
  4. 04.        super.onCreate(icicle);   
  5. 05.        MyView myView = new MyView(this);   
  6. 06.        setContentView(myView);   
  7. 07.}  
  8. 01.在layout文件中定义你的Views   
  9. 02. @Override  
  10. 03.     public void onCreate(Bundle icicle) {   
  11. 04.     super.onCreate(icicle);   
  12. 05.     setContentView(R.layout.main);   
  13. 06.     }  
复制代码
为了在你的应用程序中使用Acitvity,你还需要将你写的Acitvity类注册到Manifest当中,参见以下XML片段
  1. 01.<activity android:label=”@string/app_name”   
  2. 02.android:name=”.MyActivity”>   
  3. 03.<intent-filter>   
  4. 04.<action android:name=”android.intent.action.MAIN” />   
  5. 05.<category android:name=”android.intent.category.LAUNCHER” />   
  6. 06.</intent-filter>   
  7. 07.</activity>  
复制代码
Activity生命周期

       理解Activity的生命周期对应用程序开发来说是至关重要的,这样才能确保您的应用提供了一个很好的用户体验和妥善管理其资源。由于OPhone应用程序不控制自己的进程寿命,由OPhone Runtime管理每个应用程序进程,但是每个Activity的状态反过来会影响到OPhone Runtime是否将终止当前Activity和还是让它继续运行。

Actvity 堆栈

      每个Actvity的状态由它所在Activity栈中的位置所决定,所有当前正在运行的Actvity将遵循照后进先出的原则。当一个新的Activity启动,当前的Activity将移至堆栈的顶部,如果用户使用Back按钮,或在前台Activity被关闭,下一个Activity将被激活并且移至到堆栈的顶部。这个过程如下图所示

photo1(1).png

Activity状态
     

        随着Activity的创建和销毁,也就会进出栈如上图所示,其中可能会经历以下四种状态:

•Active状态:这时候Activity处于栈顶,且是可见的,有焦点的,能够接收用户输入前景Activity。OPhone Runtime将试图不惜一切代价保持它活着,甚至杀死其他Activity以确保它有它所需的资源。当另一个Activity变成Active时,当前的将变成Paused状态。
•Paused状态:在某些情况下,你的Activity是可见的,但没有焦点,在这时候,Actvity处于Paused状态。例如,如果有一个透明或非全屏幕上的Activity在你的Actvity上面,你的Activity将。当处于Paused状态时,该Actvity仍被认为是Active的,但是它不接受用户输入事件。在极端情况下,OPhone Runtime将杀死Paused Activity,以进一步回收资源。当一个Actvity完全被遮住时,它将进入Stopped状态。
•Stopped状态:当Activity是不可见的时,Activity处于Stopped状态。Activity将继续保留在内存中保持当前的所有状态和成员信息,假设系统别的地方需要内存的话,这时它是被回收对象的主要候选。当Activity处于Stopped状态时,一定要保存当前数据和当前的UI状态,否则一旦Activity退出或关闭时,当前的数据和UI状态就丢失了。
•Inactive状态:Activity被杀掉以后或者被启动以前,处于Inactive状态。这时Activity已被移除从Activity堆栈中,需要重新启动才可以显示和使用。

         状态过渡具有不确定性并且由OPhone Runtime完全管理。OPhone Runtime将首先杀掉处于Stopped状态的Activity,在极端情况下,也会杀掉那些处于Paused状态的Activity。
为确保无缝的用户体验,这些状态之间的过渡对用户来说应该做到透明的。不管Activity处于那种状态,最重要的是保留好UI状态和用户数据,一旦Actvity被激活,用户都能看到他想要的东西。


如何监测Actvity的状态变化


         为了确保Activity能够及时的响应状态的变化,OPhone提供了一系列的事件处理程序来处理Activity的状态转移,参考下图和示例代码。
photo2(1).png
  1. 01.public class MyActivity extends Activity {   
  2. 02.// 在Activity生命周期开始时被调用   
  3. 03.public void onCreate(Bundle icicle) {   
  4. 04.}   
  5. 05.// onCreate完成后被调用,用来回复UI状态   
  6. 06.public void onRestoreInstanceState(Bundle savedInstanceState) {   
  7. 07.            }   
  8. 08.          //当activity从停止状态重新启动时调用   
  9. 09.          public void onRestart(){   
  10. 10.          }   
  11. 11.          //当activity对用户即将可见的时候调用。   
  12. 12.          public void onStart(){   
  13. 13.          }   
  14. 14.//当activity将要与用户交互时调用此方法,此时activity在activity栈的栈顶,用户输入已经         可以传递给它   
  15. 15.public void onResume(){   
  16. 16.}   
  17. 17.// Activity即将移出栈顶保留UI状态时调用此方法   
  18. 18.public void onSaveInstanceState(Bundle savedInstanceState) {   
  19. 19.}   
  20. 20.//当系统要启动一个其他的activity时调用(其他的activity显示之前),这个方法被用来提交那些持久数据的改变、停止动画、和其他占用 CPU资源的东西。由于下一个activity在这个方法返回之前不会resumed,所以实现这个方法时代码执行要尽可能快。   
  21. 21.public void onPause(){   
  22. 22.}   
  23. 23.//当另外一个activity恢复并遮盖住此activity,导致其对用户不再可见时调用。一个新activity启动、其它activity被切换至前景、当前activity被销毁时都会发生这种场景。   
  24. 24.public void onStop(){   
  25. 25.}   
  26. 26.//在activity被销毁前所调用的最后一个方法,当进程终止时会出现这种情况   
  27. 27.public void onDestroy(){   
  28. 28.}  
复制代码
后续。。。。。
1

查看全部评分

分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享分享0 收藏收藏0

管理员

超级大菜鸟

Rank: 9Rank: 9Rank: 9

2#
Alvin 实名认证  发表于 2011-5-16 09:19:49 |只看该作者

这也行的,我老早就来这里等

使用道具 举报

管理员

超级大菜鸟

Rank: 9Rank: 9Rank: 9

3#
Alvin 实名认证  发表于 2011-5-17 09:07:14 |只看该作者

使用道具 举报

您需要登录后才可以回帖 登录 | 加入学盟

手机版|Scripts 学盟   |

GMT+8, 2024-12-19 07:10 , Processed in 1.124200 second(s), 17 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部