Android基础知识_Activity生命周期

来源:互联网 发布:淘宝联盟用红包 编辑:程序博客网 时间:2024/05/05 19:17
    Activity在系统中由Activity堆栈进行管理。当一个新的Activity被启动,它将被放置到堆栈的顶部,并且成为运行的Activity——先前的Activity在堆栈中总是保持在它的下面,并且直到新的Activity退出时将不会再一次成为前台。

    任何Activity本质上有四种状态:
    1.如果一个Activity在屏幕的前台(或在堆栈的顶部),它将是活动的或者正在运行着的。
    2.如果一个Activity已经失去焦点但是仍然可见(换言之,一个新的不能完全覆盖屏幕的或者透明的Activity在旧的Activity之上有焦点),它将是暂停的。一个已暂停的Activity是完全活着的(它维持所有状态和成员信息并且继续附属于窗口管理器),但是能被系统在内存不足的情况时杀死。
    3.如果一个Activity完全被其他Activity遮盖,它将是停止的。它仍然保持状态和成员信息,然而,它对使用者不再可见因此它的窗口是隐藏的并且它将经常在系统内存是必要的时候被杀死。
    4.如果一个Activity是暂停的或者停止的,系统能从内存的要求完成时除去Activity或者杀死它的进程。当它再一次显示给使用者,它必须完全地重新启动,恢复到它之前的状态。

    下面的图示展示了一个Activity的重要状态路径。直角矩形代表回调方法,当Activity在状态之间移动,你可以实现去执行操作。彩色的圆角矩形是Activity能处于的主要状态。


    在Activity里面有三个关键的循环你可能感兴趣去了解:
    1.一个Activity的完整生命周期(entire lifetime)发生在第一次调用onCreate(Bundle)到一个最终调用onDestroy()。一个Activity调用onCreate(Bundle)将完成所有设置,调用onDestroy()将释放所有剩下的资源。例如,如果有一个线程在后台运行从网络下载数据,它可能在onCreate(Bundle)创建线程,然后停止线程onDestroy();
    2.一个Activity的可见生命周期(visible lifetime)发生在调用onStart()到相应的调用onStop()之间。在此期间,用户能看到Activity在屏幕上,尽管它可能不是在前台与用户进行交互。在这两个方法之间你能保持需要向用户显示Activity的资源。例如,你能通过onStart()注册一个BroadcastReceiver去监测影响你的UI的变化,当用户不再看你的显示的时候通过onStop()注销。onStart()和onStop()方法可以随着Activity给用户隐藏或显示而多次调用。
    3.一个Activity的前台生命周期(foreground lifetime)发生在调用onResume()到相应的调用onPause()之间。在这段时间内,Activity是在所有其他的Activity前面与用户进行交互。一个Activity能频繁地运行在重新开始(resume)和暂停(pause)状态之间。例如,当设备进入睡眠状态,当Activity结果被交付,当一个新的意图被交付——所以这些方法的代码应该是轻量级的。

    Activity的整个生命周期被定义为以下Activity方法。所有这些方法当Activity改变状态时你能重写方法完成适当工作。所有Activity都将实现onCreate(Bundle)方法完成初始化设置,许多也将实现onPause()方法去提交更改数据,另外准备停止与用户进行交互。你应该调用你的父类实现这些方法。

public class Activity extends ApplicationContext {     protected void onCreate(Bundle savedInstanceState);     protected void onStart();     protected void onRestart();     protected void onResume();     protected void onPause();     protected void onStop();     protected void onDestroy(); }
    笔者的示例工程ActivityLifeCircleDemo,将重写以上七个方法,运行后通过虚拟仿真器AVD的Home键、返回键、任务管理器删除进程,在LogCat可以查看到相应方法的输出信息,该信息对应了Activity的生命周期。

// 主Activity文件MainActivity.javapackage com.example.activitylifecircledemo;import android.os.Bundle;import android.app.Activity;import android.view.Menu;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/* 重写onCreate方法 */System.out.println("onCreate"); }@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();/* 重写onStart方法 */System.out.println("onStart");}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();/* 重写onResume方法 */System.out.println("onResume");}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();/* 重写onPause方法 */System.out.println("onPause");}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();/* 重写onStop方法 */System.out.println("onStop");}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();/* 重写onDestroy方法 */System.out.println("onDestroy");}@Overrideprotected void onRestart() {// TODO Auto-generated method stubsuper.onRestart();/* 重写onRestart方法 */System.out.println("onRestart");}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

    Android API 中关于Activity生命周期的原文说明,可以查看此网址:

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle。

0 0
原创粉丝点击