Android生命周期介绍

来源:互联网 发布:淘宝质量问题退货 编辑:程序博客网 时间:2024/04/28 13:56

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

下设置

<activityandroid: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";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.i(TAG, "onCreate is execute");}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();Log.i(TAG, "onStart is execute");}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();Log.i(TAG, "onResume is execute");}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();Log.i(TAG, "onPause is execute");}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();Log.i(TAG, "onStop is execute");}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.i(TAG, "onDestroy is execute");}@Overrideprotected void onRestart() {// TODO Auto-generated method stubsuper.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()或系统资源不够用是会被调用。


0 0