记得刚学android的时候,关于activity生命周期这块经常需要去查官方文档,自己也没有好好的总结,今天特意重新总结一下。首先给一张android官网提供的最新的activity生命周期图,把图和后面的例子结合起来看就很容易理解了。
主要是要知道这7个回调函数的执行顺序和执行时间,下面通过一个简单的demo来测试这几个回调函数的执行情况。
1. 首先创建一个Android应用,我这里取名为AndroidLifecycle
2. 创建成功后,会生成一个MainActivity.java和layout/activity_main.xml的文件,修改这两个文件
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/test_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/hello_world"
/>
</RelativeLayout>
MainActivity.java
package com.alexzhou.androidlifecycle;
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 MainActivity extends Activity {
private static final String TAG = "MainActivty";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e(TAG,"---> onCreate");
Button button = (Button)this.findViewById(R.id.test_button);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,ThemeDialogActivity.class);
MainActivity.this.startActivity(intent);
}
});
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.e(TAG,"---> onDestory");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.e(TAG,"---> onPause");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.e(TAG,"---> onRestart");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.e(TAG,"---> onResume");
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.e(TAG,"---> onStart");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.e(TAG,"---> onStop");
}
}
3. 为了测试执行onPause()–>onResume()这种情况,需要创建一个以对话框样式显示的Activity,新建ThemeDialogActivity.java和layout_theme_dialog_activity.xml文件。
layout_theme_dialog_activity.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/hello_world"
/>
</RelativeLayout>
ThemeDialogActivity.java
package com.alexzhou.androidlifecycle;
import android.app.Activity;
import android.os.Bundle;
/**
author:alexzhou
email :zhoujiangbohai@163.com
date :2012-9-9
**/
public class ThemeDialogActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_theme_dialog_activity);
}
}
4. 然后需要在AndroidManifest.xml配置,添加下面的内容。
<activity android:name=".ThemeDialogActivity"
android:theme="@android:style/Theme.Dialog">
</activity>
5. 运行上述工程。
(1) 现在开始观察Logcat的打印信息,打开应用时先后执行了onCreate()->onStart()->onResume三个方法.
(2) 点击中间的button,会以Dialog形式显示ThemeDialogActivity,此时MainActivty已经失去焦点,但是还是可见的,只是不可操作。此时会调用onPause()方法.
(3) 按下Back键,ThemeDialogActivity将被销毁,MainActivty重新获得焦点。此时会调用onResume()方法.
(4) 按下Home键,将回到桌面,这个操作经常遇到,比如玩游戏的时候想去登陆QQ,需要按下Home键,然后打开QQ。此时MainActivty变的不可见,但还没有被销毁。先后执行了:onPause()->onStop()方法
(5) 重新进入应用时,会先后执行:onRestart()->onStart()->onResume()方法
(6) 现在按下Back键,这时MainActivty将被销毁,会先后执行:onPause()->onStop()->onDestory()方法
OK,对activty的生命周期的讲述就到此为止了。在平常的开发中,可以把一些重要数据的保存操作写在onPause()里,这样当应用被非法结束的时候,数据不会丢失,因为当应用结束的时候,这个方法始终都会执行的。
转载请注明来自: Alex Zhou ,本文链接: http://codingnow.cn/android/494.html