Activity生命周期

    技术2022-05-20  38

    监视Activity状态变化

    Activity提供了一系列的回调方法(onCreate(),onStart(),onResume等),当Activity状态发生变化时,相应的回调方法就会被调用。我们可以用日志来查看调用情况

    Log.v(String tag,String msg);  //verbose  冗余消息

    Log.d(String tag,String msg);  //debug   调试消息

    Log.i(String tag,String msg);   //info    普通消息

    Log.w(String tag,String msg);  //warn   警告消息

    Log.e(String tag,String msg);  //error  错误消息

     

    Activity生命周期中的一些回调方法

    方法

    描述

    是否可“销毁

    下一步调用

    onCreate()

    Activity在第一次创建时调用,在这里进行初始化设置:创建Views,将数据绑定到lists等。此方法还提供了Bundle参数,如果Activity之前存在被冻结的状态,那么此状态将在Bundle中提供。如果Activity是第一次被创建,此方法后将会调用onStart(),如果Activitystopped后重新启动,则调用onRestart()

    NO

    onStart()

    onRestart()

    onStart()

    Acitvity对用户即将可见时调用。如果该Activity在前台,其后调用onResume();如果Activity被隐藏了,则调用onStop()

    No

    onStop()

    onResume()

    onRestart()

    Activitystopped状态重新启动时调用,其后总是调用onStart()

    No

    onStart()

    onResume()

    Activity将要与用户交互时调用此方法,此时ActivityActivity栈的栈顶,已经可以接受用户的输入,其后调用onPause()

    No

    onPause()

    onPause()

    当系统要resume一个其他的Activity时调用,这个方法被用来持久化数据、停止动画或其他占用CPU资源的东西。由于下一个Activity在这个方法返回之前不会resumed,所以实现这个方法时代码执行要尽可能快。

    如果Activity冲洗回到前台时调用onResume(),如果对用户不可见则调用onStop()

    Yes

    onResume()

    onStop()

    onStop()

    当另一个Activity恢复并遮盖住此Activity,导致其对用户不在可见时调用。一个新Activity启动,其他Activity被切换到前台、当前Activity被销毁时都可能发生这种情况。

    Activity重新回到前台与用户交互时调用onRestart(),如果Activity将退出则调用onDestory()

    Yes

    onRestart()

    onDestory()

    onDestory()

    Activity被销毁前所调用的最后一个方法,当进程终止时会出现这种情况(对Activity之间调用finish()方法或者系统为了节省空间而临时销毁此Activity的实例,可以通过isFinishing()的返回值来区分这2种情况)如果有一个Progress Dialog在线程中转动,请在onDestory里把它cancel掉,不然等线程结束的时候,调用Dialogcancel方法可能会抛出异常

    Yes

     

    例如:

     

    package org.test.lifestyle;

     

    import android.app.Activity;

    import android.os.Bundle;

    import android.util.Log;

     

    public class Test extends Activity {

        /** Called when the activity is first created. */

        private static final String TAG="[Helloworld]";

        @Override

        public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.main);

            Log.v(TAG,"onCreate");

        }

        @Override

        protected void onDestroy() {

           // TODO Auto-generated method stub

           super.onDestroy();

           Log.v(TAG,"onDestory");

        }

        @Override

        protected void onPause() {

           // TODO Auto-generated method stub

           super.onPause();

           Log.v(TAG,"onPause");

        }

        @Override

        protected void onRestart() {

           // TODO Auto-generated method stub

           super.onRestart();

           Log.v(TAG, "onRestart");

        }

        @Override

        protected void onResume() {

           // TODO Auto-generated method stub

           super.onResume();

           Log.v(TAG,"onResume");

        }

        @Override

        protected void onStart() {

           // TODO Auto-generated method stub

           super.onStart();

           Log.v(TAG,"onStart");

        }

        @Override

        protected void onStop() {

           // TODO Auto-generated method stub

           super.onStop();

           Log.v(TAG,"onStop");

        }

       

    }

     

    DDMS状态

     

     

     


    最新回复(0)