Activity的生命周期

Activity的生命周期

    前面一篇讲了Android的Application使用,下面就我个人总结一下自己对Activity的理解

    1.Activity是干什么的?

       Activity是android四个组件之一,那么Activity在android中起到了什么作用了?我们在玩安卓手机时,进入某一个APP,很看到很多个界面,每一个能看到的界面就是一个Activity里,android3.0引入了fragment(碎片),看到的界面有可能是一个fragment,而每一个fragment都必须依赖于一个Activity,在这里我们不考虑fragment,后面在讲fragment的使用方法,生命周期以及它和Activity之间的关系。这里我们主要讲解Activity的生命周期及其使用。Activity就是能和我们人交互的界面,也是我们通常在手机上面看到的界面,我们点击手机的某一个按钮,做出交互动作的界面。


    2.Activity的生命周期

       那我们先来看一张android关于Activity生命周期的图

      如果是一个刚刚接触android的开发人员,看这张图可能有点摸不清头脑,不要紧,接下来我会从Activity start的地方开始讲起,让你更加深刻的了解Activity是怎么运作的。好了,废话不说了,从Activity 的start开发。

      先看整张图,我们可以知道了,Activity的生命周期中会有七个方法分别是
      oncreate(),  onstart(),  onresume(),  onpause(),  onstop(),  onrestart,  ondestroy()先不谈这七个方法。

      假如我们在安卓手机上面安装了一个APP,此时我们想用这个APP,通过上篇文章可以知道,启动APP会去调用Application中的onCreate方法, 之后就会有一个界面显示在我们先前,那么为什么这个界面显示,而不是其它的界面优先显示了,我们可以打androidmanfest.xml文件看看

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name="com.simple.fan.MainActivity">
            <intent-filter >
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

       <activity  android:name="com.simple.fan.SecondActivity"/>
    </application>

     我们看到了两个Activity,但是这两个Activity标签不一样,MainActivity多一点点东西,<intent-filter>这个标签中的定义的两个子标签,正是因为这两个子标签就告诉了APP最开始显示这个Activity,那么就是启动了MainActivity,就回到了我们上图中看到的Activity start处,然后Activity会继续运行,显示一个很漂亮的界面在我们眼前,这个过程中调用上图中onCreate()-->onStart()-->onResume() 三个方法,之后这个Activity就停留在onresume处,我们点击界面中某一个按钮跳转到其它界面时,MainActivity就会紧接着调用onPause()-->onStop()两个方法,而新启动的SecondActivity就会跟刚刚讲到的一样,调用onCreate()-->onStart()-->onResume方法,如果此时我们按返回键,那么SecondActivity就会从出栈(后面讲到,管理Activity),此时SecondActivity会用调用onPause()-->onStop()-->onDestroy()方法,此时这个Activity就被销毁了,因为调用了onDestroy就销毁Activity,而在MainActivity中会调用onRestart()-->onStart()-->onResume()等三个两个,通过观察,我们看到了,onCreate方法只调用了一边,而回到MainActivity中时,调用了onRestart方法,而如果我们此时在点击返回键,在MainActivity中就会调用onPause()-->onStop()-->onDestroy()。此时我们已经做了两个Activity的正常生命周期的调用,SecondActivity和MainActivity。

      我们仔细看看刚刚的调用过程,会发现七个函数都调用了,当停留在某一个界面时,就会处在当前Activity的onResume处,而跳转是隐藏掉的Activity就会处在onStop处,Activity退出后就会调用destroy销毁当前Activity。但是我们仔细看看上图,好像有一条路我没有做,就是从onPause-->onResume两个,那么这种情况什么时候发生了,就是当我们跳转Activity时,准备跳转的Activity的跳转后,还能显示在我们能看到界面中,就好像被另一个Activity的压住了,但是它又没有完全被挡,此时被挡出的Activity处在onPause处,当点击返回键时,被挡住的Activity的就会走onResume方法了。最后一个中状态就是我们APP打开太多了的时候,因为内存不足的原因,会被系统kill掉。

      Activity生命周期的四中情况讲完了,那么接下来讲每一个方法到底怎么用。

      onCreate  在这个方法中一般都是做一些初始化工作,因为这个方法只会被调用一次

      onStart    Activity创建或者从后台重新回到前台时被调用

      onResume   Activity创建或者从被覆盖、后台重新回到前台时被调用,一般是用来重新刷新UI

      onPause    Activity被覆盖到下面或者锁屏时被调用

      onStop    退出当前Activity或者跳转到新Activity时被调用

      onDestroy    退出当前Activity时被调用,调用之后Activity就结束,一般用来销毁数据

      如果是被系统kill掉了,就会调用onRestoreInstanceState方法,一般用来保存非法状态下被系统kill掉了,保存数据供下来进入时使用。

   

       3代码

     

public class MainActivity extends Activity {
	
	private static final String TAG = "simple";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main_activity);
		Log.i(TAG, "MainActivity method : onCreate");
	}

	@Override
	protected void onStart() {
		super.onStart();
		Log.i(TAG, "MainActivity method : onStart");
	}

	@Override
	protected void onRestart() {
		super.onRestart();
		Log.i(TAG, "MainActivity method : onRestart");
	}

	@Override
	protected void onResume() {
		super.onResume();
		Log.i(TAG, "MainActivity method : onResume");
	}

	@Override
	protected void onPause() {
		super.onPause();
		Log.i(TAG, "MainActivity method : onPause");
	}

	@Override
	protected void onStop() {
		super.onStop();
		Log.i(TAG, "MainActivity method : onStop");
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		Log.i(TAG, "MainActivity method : onDestroy");
	}
      每一个方法在上面都讲了,就不写注释了。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值