Activity的生命周期图如上所示
用一个实例来测试:
1、重写Activity的onCreate、onStart、onResume、onPause、onStop、onDestroy、onRestart
2、MainActivity 有两个按钮btn1、btn2,点击btn1跳转到SecondActivity,点击btn2跳转到ThirdActivity,用Log.i()来记录表出这3个Acitivity的生命状态
MainActivity:
package com.test.activitydemo;
//import android.R;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.support.v4.app.NavUtils;
public class MainActivity extends Activity {
public final static String TAG="MainActivity";
private Button btn1;
private Button btn2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "MainActivity-->onCreate");
btn1=(Button)findViewById(R.id.btn1);
btn2=(Button)findViewById(R.id.btn2);
btn1.setOnClickListener(listener);
btn2.setOnClickListener(listener);
}
private View.OnClickListener listener=new View.OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
Button btn=(Button)v;
Intent intent=new Intent();
switch(btn.getId())
{
case R.id.btn1:
intent.setClass(MainActivity.this, SecondActivity.class);
break;
case R.id.btn2:
intent.setClass(MainActivity.this, ThirdActivity.class);
break;
}
startActivity(intent);
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
protected void onDestroy()
{
// TODO Auto-generated method stub
super.onDestroy();
Log.i(TAG, "MainActivity-->onDestroy");
}
@Override
protected void onPause()
{
// TODO Auto-generated method stub
super.onPause();
Log.i(TAG, "MainActivity-->onPause");
}
@Override
protected void onRestart()
{
// TODO Auto-generated method stub
super.onRestart();
Log.i(TAG, "MainActivity-->onRestart");
}
@Override
protected void onResume()
{
// TODO Auto-generated method stub
super.onResume();
Log.i(TAG, "MainActivity-->onResume");
}
@Override
protected void onStart()
{
// TODO Auto-generated method stub
super.onStart();
Log.i(TAG, "MainActivity-->onStart");
}
@Override
protected void onStop()
{
// TODO Auto-generated method stub
super.onStop();
Log.i(TAG, "MainActivity-->onStop");
}
}
SecondActivity:
package com.test.activitydemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class SecondActivity extends Activity
{
public final static String TAG="MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Log.i(TAG, "SecondActivity-->onCreate");
}
@Override
protected void onDestroy()
{
// TODO Auto-generated method stub
super.onDestroy();
Log.i(TAG, "SecondActivity-->onDestroy");
}
@Override
protected void onPause()
{
// TODO Auto-generated method stub
super.onPause();
Log.i(TAG, "SecondActivity-->onPause");
}
@Override
protected void onRestart()
{
// TODO Auto-generated method stub
super.onRestart();
Log.i(TAG, "SecondActivity-->onRestart");
}
@Override
protected void onResume()
{
// TODO Auto-generated method stub
super.onResume();
Log.i(TAG, "SecondActivity-->onResume");
}
@Override
protected void onStart()
{
// TODO Auto-generated method stub
super.onStart();
Log.i(TAG, "SecondActivity-->onStart");
}
@Override
protected void onStop()
{
// TODO Auto-generated method stub
super.onStop();
Log.i(TAG, "SecondActivity-->onStop");
}
}
ThirdActivity:
package com.test.activitydemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class ThirdActivity extends Activity
{
public final static String TAG="MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.avtivity_third);
Log.i(TAG, "ThirdActivity-->onCreate");
}
@Override
protected void onDestroy()
{
// TODO Auto-generated method stub
super.onDestroy();
Log.i(TAG, "ThirdActivity-->onDestroy");
}
@Override
protected void onPause()
{
// TODO Auto-generated method stub
super.onPause();
Log.i(TAG, "ThirdActivity-->onPause");
}
@Override
protected void onRestart()
{
// TODO Auto-generated method stub
super.onRestart();
Log.i(TAG, "ThirdActivity-->onRestart");
}
@Override
protected void onResume()
{
// TODO Auto-generated method stub
super.onResume();
Log.i(TAG, "ThirdActivity-->onResume");
}
@Override
protected void onStart()
{
// TODO Auto-generated method stub
super.onStart();
Log.i(TAG, "ThirdActivity-->onStart");
}
@Override
protected void onStop()
{
// TODO Auto-generated method stub
super.onStop();
Log.i(TAG, "ThirdActivity-->onStop");
}
}
Manifest:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.activitydemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SecondActivity" android:label="@string/title_activity_second"> </activity> <!-- ThirdActivity以对话框的形式弹出 --> <activity android:name=".ThirdActivity" android:label="@string/title_activity_third" android:theme="@android:style/Theme.Dialog"> </activity> </application> </manifest>
当activity状态为onPause时,不适于进行太耗时的操作;
如果要保存信息,比较安全的做法是当activity在onPause时进行保存,这是因为当activity在onPause、onStop、onDestroy状态时,都有可能被系统杀死,如果在onStop或者onDestroy状态下保存,有可能activity在onPause时已经被系统杀死,从而导致信息丢失。