监视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(),如果Activity是stopped后重新启动,则调用onRestart() | NO | onStart()或 onRestart() |
onStart() | 当Acitvity对用户即将可见时调用。如果该Activity在前台,其后调用onResume();如果Activity被隐藏了,则调用onStop() | No | onStop()或 onResume() |
onRestart() | 当Activity从stopped状态重新启动时调用,其后总是调用onStart() | No | onStart() |
onResume() | 当Activity将要与用户交互时调用此方法,此时Activity在Activity栈的栈顶,已经可以接受用户的输入,其后调用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掉,不然等线程结束的时候,调用Dialog的cancel方法可能会抛出异常 | 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状态