记得刚学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()里,这样当应用被非法结束的时候,数据不会丢失,因为当应用结束的时候,这个方法始终都会执行的。

android使用tcpdump抓包

最近游戏在接qq opensdk的时候调用一个cgi一直不成功,文档描述太简单,我们调用的又是互娱这边msdk的api,由msdk调用opensdk相关api,中间跨了两部门,为了...

阅读全文

Android.mk文件解读

我们在Android平台写c/c++程序的时候需要用到Android.mk(Makefile),一般用来编译c/c++源码、引用第三方头文件和库,生成程序所需的so文件。下面是一个cocos2...

阅读全文

Android性能优化案例研究(下)

去掉冗余的图层 为 了去掉重绘我们必须首先理解它从哪里产生的。这就轮到Hierarchy Viewer和Tracer for OpenGL大显身手的时候了。Hierarchy Viewer是ADT工具...

阅读全文

欢迎留言