Android Activity生命周期详解

本文详细解析Android Activity生命周期,并通过实例演示各个回调函数的执行顺序与时间,帮助开发者更好地理解和掌握Activity生命周期管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记得刚学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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值