搞懂Activity生命周期对于Android开发非常重要。
Activity生命周期大致可归纳为四种状态:
- 运行态。当前Activity位于前台,用户可见,可获得焦点。
- 暂停态。其他Activity位于前台,该Activity可见但不能获得焦点(比如启动一个对话框风格的Activity)。
- 停止态。该Activity不可见,失去焦点。
- 销毁态。该Activity结束。
在应用过程中,我们会遇到这样几种情况
- 程序启动
- 用户点击了Home键
- 用户跳转了新的Activity
- 用户点开了一个Dialog风格的Activity
- 用户接到电话
- 用户退出程序
我们一个一个来做实验,逐个看控制台打印情况
1、程序启动
12-23 06:17:18.318 19808-19808/? D/ActivityLife﹕ ---onCreate---
12-23 06:17:18.355 19808-19808/? D/ActivityLife﹕ ---onStart---
12-23 06:17:18.355 19808-19808/? D/ActivityLife﹕ ---onResume---
2、用户点击了Home键
12-23 06:19:10.246 19808-19808/? D/ActivityLife﹕ ---onPause---
12-23 06:19:11.946 19808-19808/? D/ActivityLife﹕ ---onStop---
返回应用
12-23 06:19:41.675 19808-19808/? D/ActivityLife﹕ ---onRestart---
12-23 06:19:41.675 19808-19808/? D/ActivityLife﹕ ---onStart---
12-23 06:19:41.675 19808-19808/? D/ActivityLife﹕ ---onResume---
3、用户跳转了新的Activity
12-23 06:20:27.545 19808-19808/? D/ActivityLife﹕ ---onPause---
12-23 06:20:28.465 19808-19808/? D/ActivityLife﹕ ---onStop---
4、用户点开了一个Dialog风格的Activity
12-23 06:40:16.485 19993-19993/? D/ActivityLife﹕ ---onPause---
返回
12-23 06:40:24.776 19993-19993/? D/ActivityLife﹕ ---onResume---
5、用户接到电话
12-23 06:41:23.625 19993-19993/? D/ActivityLife﹕ ---onPause---
12-23 06:41:33.720 19993-19993/? D/ActivityLife﹕ ---onStop---
6、用户退出程序
12-23 06:43:31.325 19993-19993/? D/ActivityLife﹕ ---onPause---
12-23 06:43:31.720 19993-19993/? D/ActivityLife﹕ ---onStop---
12-23 06:43:32.120 19993-19993/? D/ActivityLife﹕ ---onDestroy---
主程序代码
package com.android.crazy.activitylifetest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
/**
* Jet
* Activity生命周期测试
*/
public class MainActivity extends Activity {
private String TAG = "ActivityLife";
private Button newBtn;
private Button alertBtn;
private Button finishBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "---onCreate---");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
newBtn = (Button)findViewById(R.id.newBtn);
alertBtn = (Button)findViewById(R.id.alertBtn);
finishBtn = (Button)findViewById(R.id.finishBtn);
newBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
alertBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("TIPS");
builder.setMessage("Hello there.");
builder.setPositiveButton("DlgActivity", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(MainActivity.this, DialogStyleActivity.class);
startActivity(intent);
}
});
builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
});
finishBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MainActivity.this.finish();
}
});
}
@Override
protected void onStart() {
Log.d(TAG,"---onStart---");
super.onStart();
}
@Override
protected void onResume() {
Log.d(TAG,"---onResume---");
super.onResume();
}
@Override
protected void onPause() {
Log.d(TAG,"---onPause---");
super.onPause();
}
@Override
protected void onRestart() {
Log.d(TAG,"---onRestart---");
super.onRestart();
}
@Override
protected void onStop() {
Log.d(TAG,"---onStop---");
super.onStop();
}
@Override
protected void onDestroy() {
Log.d(TAG,"---onDestroy---");
super.onDestroy();
}
}