Android生命周期介绍

          什么是Activity,简单的说:Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中制定一个主Activity,如

下设置

<activity
			android:name=".ActionViewTest"
			android:label="@string/title_activity_action_view_test">
<!-- android:name=".ActionViewTest表示整个应用程序的主程序的名称
	<intent-filter>意图过滤器:用于过滤用户的一些动作和操作
	"android.intent.action.MAIN"表示当前程序是否在程序是整个工程的入口程序
	category android:name表示决定应用程序是否在程序列表中显示-->			
			<intent-filter>
				<action android:name="android.intent.action.MAIN" />
				<category android:name="android.intent.action.MAIN" />
			</intent-filter>
		</activity>

        当程序第一次运行时用户就会看这个Activity,这个Activity可以通过启动其他的Activity进行相关的操作。

       当启动其他的Activity时这个当前的这个Activity将会停止,新的Activity将会停止,新的Activity将会压入栈中,同时获取 用户焦点,这是就可在这个Activity上操作了。

       我们都知道栈是先进后出的原则,那么当用户按Back键时,当前的这个Activity销毁,前一个Activity重新恢复。

       我们来看看Activity生命周期的7个方法和3个阶段

       7个方法如下:

       void onCreate(Bundle savedInstanceState)

       void onStart()

       void onRestart()

      void onPause()

     void onStop()

      void onDestroy()

Activity的三个阶段:

开始Activity:在这个阶段依次执行3个生命周期的方法,分别是onCreare,onStart,onResume方法。

Activity重新获得焦点:如果Activity重新获得焦点,会依次执行3个生命周期,分别是onRestart,onStart,onResume

关闭Activity,当Activity被关闭是系统会依次执行3个生命周期,分别是onPause,onStoo,onDestroy


     从上图可以看出有两层循环,第一层是焦点的获得与失去循环,onResume()->onPause->onResume()。

     第二层是可视与不可视的循环,onStart->onResume->onPause->onStop->onRestart。

     具体周期如下:

     整个生命周期:onCreat->onDestroy

     焦点生命周期:onResume->onPause

     可视生命周期:onStart->onStop()

     示例源代码如下:

package com.example.lifedemo;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {
    private final String TAG = "MainActivity";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Log.i(TAG, "onCreate is execute");
	}
	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		Log.i(TAG, "onStart is execute");
	}
	
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Log.i(TAG, "onResume is execute");
	}
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		Log.i(TAG, "onPause is execute");
	}
	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		Log.i(TAG, "onStop is execute");
	}
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		Log.i(TAG, "onDestroy is execute");
	}
	@Override
	protected void onRestart() {
		// TODO Auto-generated method stub
		super.onRestart();
		Log.i(TAG, "onRestart is execute");
	}
	
}

首先运行程序

运行onCreat->onStart->onResume获得焦点



然后模拟打电话onPause->onStop失去焦点//在两个步骤之间执行第二个Avtivity的onCreate onStart onResume

同时注意只有第一个Activity被全部遮盖才会调用onStop,如果只是调用了一个对话框是不会没有全部遮盖就不会调用onStop了。

然后推出打电话状态onRestart->onStart->onResume重新获得焦点//开始第二个Activity先执行onPause,在最后会执行第二个Activity的onStop onDestory

最后back键onPause->onStop->onDestroy程序结束


onDestory在执行了finish()或系统资源不够用是会被调用。


发布了41 篇原创文章 · 获赞 3 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章