您的位置:首页 > 移动开发 > Android开发

Android Activity生命周期以及LoCat的使用

2011-03-15 21:51 477 查看
Activity主要有三个状态:

当在屏幕前台时(位于当前任务堆栈的顶部),它是活跃或运行的状态。它就是相应用户操作的Activity。

当它失去焦点但仍然对用户可见时,它处于暂停状态。即:在它之上有另外一个Activity。这个Activity也许是透明的,或者未能完全遮蔽全屏,
所以被暂停的Activity仍对用户可见。暂停的Activity仍然是存活状态(它保留着所有的状态和成员信息并连接至窗口管理器),但当系统处于极
低内存的情况下,仍然可以杀死这个Activity。

如果它完全被另一个Activity覆盖时,它处于停止状态。它仍然保留所有的状态和成员信息。然而它不再为用户可见,所以它的窗口将被隐藏,如果其他地方需要内存,则系统经常会杀死这个Activity。

API里Activity的生命周期图:



Activity继承了ApplicationContext这个类,Activity的生命周期由下面七个方法实现:

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();
}


在学习Activity的生命周期时,为了更好理解Activity的生命周期,我基本重写了这七个方法,并用
android.util.log这个类的静态方法打印出来,
这个类相当的简单易用,因为它提供的全是一些静态方法:

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的代码清单:FirstActivity

package blog.activity.demo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class FirstActivity extends Activity {

private final static String TAG = "FIRSTACITVITY";
private Button myButton;
@Override
public void onCreate(Bundle savedInstanceState) {
Log.v(TAG, "FirstAcvity ---> onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myButton = (Button)findViewById(R.id.myButton);
myButton.setText("启动第二个Activity");
myButton.setOnClickListener(new ButtonOnClickListener());
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
Log.v(TAG, "FirstAcvity --->onDestory");
super.onDestroy();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub/
Log.v(TAG, "FirstAcvity --->onPause");
super.onPause();
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
Log.v(TAG, "FirstAcvity --->onRestart");
super.onRestart();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
Log.v(TAG, "FirstAcvity --->onResume");
super.onResume();
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
Log.v(TAG, "FirstAcvity --->onStart");
super.onStart();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
Log.v(TAG, "FirstAcvity --->onStop");
super.onStop();
}

class ButtonOnClickListener implements OnClickListener{
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(FirstActivity.this,SecondActivity.class);
FirstActivity.this.startActivity(intent);
}

}

}


SecondActivity:

package blog.activity.demo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class SecondActivity extends Activity {

private final static String TAG = "SECONDACITVITY";

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
Log.v(TAG, "FirstAcvity ---> onCreate");
super.onCreate(savedInstanceState);

}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
Log.v(TAG, "SecondActivity --->onDestory");
super.onDestroy();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
Log.v(TAG, "SecondActivity--->onPause");
super.onPause();
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
Log.v(TAG, "SecondActivity--->onRestart");
super.onRestart();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
Log.v(TAG, "SecondActivity--->onResume");
super.onResume();
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
Log.v(TAG, "SecondActivity--->onStart");
super.onStart();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
Log.v(TAG, "SecondActivity--->onStop");
super.onStop();
}
}



代码没什么特别的,运行工程效果图如下:



重点在Logcat视窗里,打开应用时先后执行了onCreate()->onStart()->onResume三个方法,看一下LogCat视窗如下:



当点击启动到第二个Activity时,FirstActivity执行了onPause->onStop,SecondActivity执行了onCreate()->onStart()->onResume方法,看Logcat视窗:





BACK键:

当按BACK键时,返回FirstActivity,这时候FirstActivity不是调用onCreate()->onStart()->onResume三个方法,而是调用onReStart->onStart->onResume,如下图所示:



而SecondActivity一次调用了onPause->onStop->onDestory,看图:



这样基本可以看到Activity的生命周期了,虽然有些还是有点不明了,但基本可以理解了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐