Activity生命周期完美呈现

        声明:写下本文主要是为了记录一些学习的笔记,当然了,如果能给别的博友带去帮助,那就更加好了!因为接触安卓开发的时间不是太长,加上文笔有限,如有错误,欢迎指出;如有侵权,还请告知,谢谢!

         那么我们直入主题,关于活动(Activity)的生命周期,主要通过七个回调函数来说明:

  •  onCreate()

  1. 每个活动都要重写这个方法,它会在活动第一次被创建的时候调用。在这里可以进行一些简单的初始化操作,比如加载活动对应的布局,绑定事件等,它对应的下一个回掉方法总是onStart();
  •   onStart()

  1. 这个方法会在一个活动由不可见变为可见之前调用。如果对应的活动是进入前台,下一个回掉方法是onResume();如果活动进入被遮蔽状态,下一个回掉方法是onStop();
  •  onResume()

  1.  这个方法在活动就绪,准备跟用户进行交互之前调用。此时活动一定处在返回栈的栈顶,并且处于运行状态。下一个回掉方法总是onPause();
  •  onPause()

  1. 这个方法在系统准备启动或者恢复另一个活动的时候调用。一般会在这个方法中将一些消耗CPU的资源释放,以及保存一些关键的数据。要注意的是这个方法执行速度要快,不然会影响到下一个活动的使用。如果活动进入前台,则下一个回掉方法是onResume(),如果活动被遮蔽,下一个方法是onStop();
  •  onStop()

  1.  这个方法在活动完全不可见的时候调用。如果活动以后还能跟用户交互,下一个回掉方法是onRestart(),如果活动即将销毁,下一个回掉方法是onDestory()。如果启动的新活动是对话框模式的,那么opPause()会得到执行,而onStop()不会。
  •   onDestory()

  1. 这个方法在活动被销毁之前调用。后面就没有回掉方法了。
  • onRestart()

  1.   这个方法在活动由停止状态变为运行状态之前调用。下一个回掉方法总是onStart();

 

         下面我们通过一个项目来实际查看效果:

         首先新建一个安卓项目ActivityLifeCycle,在默认生成的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/btnNormal"
        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="@string/btnNormal" />
   <Button
        android:id="@+id/btnDialog"
        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_below="@+id/btnNormal"

        android:text="@string/btnDialog" />
</RelativeLayout>


          既然有了两个启动不同类型活动的按钮,那么我们还需要新建两个Activity:NormalActivity(对应的布局是activity_normal.xml)和DialogActivity(对应的布局是activity_dialog.xml),两个Activity都是默认生成,我们只在布局文件里面做很小的改动,分别是:

activity_normal.xml

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="@string/title_activity_normal"
        android:textSize="20sp" />

activity_dialog.xml

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="@string/title_activity_dialog"
        android:textSize="20sp" />

        只是 把系统生成的显示helloworld的地方改成了“这是普通模式Activity!”和“这是对话框模式的Activity!”这两段文本。(注意:为了显示对话框模式的的Activity,我们要在AndroidMainfest.xml中对DialogActivity的配置作如下修改):

<activity
    android:theme="@android:style/Theme.Dialog"</span>
    android:name="com.example.lifecycle.app.DialogActivity"
    android:label="@string/title_activity_dialog" >
    </activity>

        以此标记这是对话框模式的Activity!

        接下来我们打开MainActivity,复写七个回掉方法,并且在每个回掉方法里面打印日志,用于跟踪整个生命周期的活动顺序,代码如下:

package com.example.lifecycle.app;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/**
 * Activity生命周期完美呈现
 * 
 * @author Luo
 */
public class MainActivity extends Activity {
	// 定义用于日志输出的常量
	private static final String TAG = "MainActivity";
	// 声明控件
	private Button btnNormal, btnDialog;

	/**
	 * 每个活动都要重写这个方法,它会在活动第一次被创建的时候调用。在这里可以进行一些简单的初始化操作,比如加载活动对应的布局,绑定事件等,
	 * 它对应的下一个回掉方法总是onStart()
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Log.e(TAG, "onCreate!!!");
		setContentView(R.layout.activity_main);
		// 获取控件
		btnNormal = (Button) findViewById(R.id.btnNormal);
		btnDialog = (Button) findViewById(R.id.btnDialog);
		// 添加启动普通模式Activity按钮侦听事件
		btnNormal.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent normalIntent = new Intent(MainActivity.this,
						NormalActivity.class);
				MainActivity.this.startActivity(normalIntent);
			}
		});
		// 添加启动对话框模式Activity按钮侦听事件
		btnDialog.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent normalIntent = new Intent(MainActivity.this,
						DialogActivity.class);
				MainActivity.this.startActivity(normalIntent);
			}
		});
	}

	/**
	 * 这个方法会在一个活动由不可见变为可见之前调用。 如果对应的活动是进入前台,下一个回掉方法是onResume();
	 * 如果活动进入被遮蔽状态,下一个回掉方法是onStop()
	 */
	@Override
	protected void onStart() {
		super.onStart();
		Log.e(TAG, "onStart!!!");
	}

	/**
	 * 这个方法在活动就绪,准备跟用户进行交互之前调用。 此时活动一定处在返回栈的栈顶,并且处于运行状态。 下一个回掉方法总是onPause()
	 */
	@Override
	protected void onResume() {
		super.onResume();
		Log.e(TAG, "onResume!!!");
	}

	/**
	 * 这个方法在系统准备启动或者恢复另一个活动的时候调用。 一般会在这个方法中将一些消耗CPU的资源释放,以及保存一些关键的数据。
	 * 要注意的是这个方法执行速度要快,不然会影响到下一个活动的使用。 如果活动进入前台,则下一个回掉方法是onResume();
	 * 如果活动被遮蔽,下一个方法是onStop()
	 */
	@Override
	protected void onPause() {
		super.onPause();
		Log.e(TAG, "onPause!!!");
	}

	/**
	 * 这个方法在活动完全不可见的时候调用。 如果活动以后还能跟用户交互,下一个回掉方法是onRestart();
	 * 如果活动即将销毁,下一个回掉方法是onDestory();
	 * 如果启动的新活动是对话框模式的,那么opPause()会得到执行,而onStop()不会
	 */
	@Override
	protected void onStop() {
		super.onStop();
		Log.e(TAG, "onStop!!!");
	}

	/**
	 * 这个方法在活动被销毁之前调用。 后面就没有回掉方法了。
	 */
	@Override
	protected void onDestroy() {
		super.onDestroy();
		Log.e(TAG, "onDestroy!!!");
	}

	/**
	 * 这个方法在活动由停止状态变为运行状态之前调用。 下一个回掉方法总是onStart()
	 */
	@Override
	protected void onRestart() {
		super.onRestart();
		Log.e(TAG, "onRestart!!!");
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
}

相关注释已经在代码里面体现,这里不再一一解释,让我们来运行一下程序查看日志输出效果(注意:这里的每次截图都有把上一次的日志先清空):

        1、可以发现,MainActivity第一次被创建的时候,我们看到如下界面,只是两个简单的按钮,分别用于启动普通模式的Activity跟对话框模式的Activity:

 

onCreate() 、onStart()、 onResume()等三个方法依次被执行,看看后台日志:


2、清空日志,点击第一个按钮启动普通Activity,我们看到NormalActivity完全遮盖了MainActivity:


onPause() 、onStop()依次被执行,看看后台日志:


3、清空日志,点击返回键,回到主界面:

由于在这之前MainActivity进入了停止状态,所以onRestart()会先执行、之后依次是onStart()、 onResume(),看看后台日志:


4、清空日志,点击第二个按钮,我们看到对话框界面:

 

因为是对话框,MainActivity没有被完全遮盖,只有onPause()被执行,此时的MainActivity进入了暂停状态,看看后台日志:


5、清空日志,点击返回键,又回到了主界面,只有onResume()被执行,看看后台日志:


6、清空日志,点击返回键退出程序,onPause()、onStop()、onDestory()依次得到了执行,看看后台日志:


        相信经过以上一系列的过程,大家对Activity的生命周期的了解又加深了吧,在此附上官方图片一张:


如果有需要,附上源码下载,请点击这里!

我还小,但是我愿意成长,小罗,加油!!!

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值