天天看點

13_Android的生命周期



activity的生命周期圖

13_Android的生命周期

2 android生命周期中涉及到的幾個過程

1.啟動activity:系統會先調用oncreate方法,然後調用onstart方法,最後調用onresume,activity進入運作狀态。

2. 目前activity被其他activity覆寫其上或被鎖屏,系統會調用onpause方法,暫停目前activity的執行。

3.目前activity由被覆寫狀态回到前台或解鎖鎖屏:系統會調用onresume方法,再次進入運作狀态。

4.目前activity轉到的activity界面或按home鍵回到主屏,自身退居背景:系統會先調用onpause方法,然後調用onstop方法。進入停滞狀态。

5.使用者後退回到此activity:系統會先後調用onrestart方法,然後調用onstart方法,最後調用onresume方法,再次進入運作狀态。

6.目前activity處于被覆寫狀态或者背景不可見狀态,即第2步和第4步,系統記憶體不足,殺死目前activity,而後使用者退回目前activity,再次調用oncreate方法、onstart方法、onresume方法,進入運作狀态。

7.當使用者退出目前activity:系統先調用onpause方法,然後調用onstop方法,最後調用ondestory方法,結束目前activity.

3.編寫如下程式進行測試

13_Android的生命周期

4 android清單檔案如下:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.itheima.lifecycle"

    android:versioncode="1"

    android:versionname="1.0" >

    <uses-sdk

        android:minsdkversion="8"

        android:targetsdkversion="19" />

    <application

        android:allowbackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/apptheme" >

        <activity

            android:name="com.itheima.lifecycle.mainactivity"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.main" />

                <category android:name="android.intent.category.launcher" />

            </intent-filter>

        </activity>

            android:theme="@android:style/theme.translucent"

            android:name="com.itheima.lifecycle.secondactivity">

    </application>

</manifest>

5 布局檔案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"

    tools:context=".mainactivity" >

    <button

        android:onclick="click"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_centervertical="true"

        android:layout_centerhorizontal="true"

        android:text="開啟第二個界面"/>

</relativelayout>

布局檔案:activity_second.xml

<relativelayout

xmlns:android="http://schemas.android.com/apk/res/android"

    tools:context=".secondactivity" >

   <textview

        android:text="我是第二個界面"/>

6 mainactivity的代碼如下:

package com.itheima.lifecycle;

import android.content.intent;

import android.os.bundle;

import android.support.v7.app.actionbaractivity;

import android.view.view;

public class mainactivity extends actionbaractivity {

                      /**

                       * 被建立的時候調用的方法

                       */

                      @override

                      protected void oncreate(bundle savedinstancestate) {

                            super.oncreate(savedinstancestate);

                            setcontentview(r.layout.activity_main);

                            system.out.println("oncreate");

                      }

                       * 被銷毀的時候調用的方法

                      protected void ondestroy() {

                            system.out.println("ondestroy");

                            super.ondestroy();

                       * 當activity界面可見的時候調用的方法

                       * activity建立或者從背景重新回到前台時候被調用

                      protected void onstart() {

                            system.out.println("onstart");

                            super.onstart();

                       * activity從背景重新回到前台時被調用

                      protected void onrestart() {

                            super.onrestart();

                       * 當activity界面使用者不可見的時候調用的方法

                      protected void onstop() {

                            system.out.println("onstop");

                            super.onstop();

                       * 界面開始擷取到焦點對應的方法。

                       * (界面按鈕可以被點選,文本框可以輸入内容)

                       *

                       * activity建立或者從被覆寫、背景重新回到前台時被調用

                      protected void onresume() {

                            system.out.println("onresume");

                            super.onresume();

                       * 界面失去焦點對應的方法(暫停)

                       * (按鈕不可被點選,文本框不可,但是界面輸入内容,使用者仍然能看見)

                      protected void onpause() {

                            system.out.println("onpause");

                            super.onpause();

                            //可能在執行完onpause或onstop後,系統資源緊張将activity殺死,是以有

                            //必要在此儲存持久資料

                       * 視窗獲得或失去焦點是被調用,在onresume之後或onpause之後

                      public void onwindowfocuschanged(boolean hasfocus) {

                            system.out.println("onwindowfocuschanged");

                            super.onwindowfocuschanged(hasfocus);

                       * activity被系統殺死是被調用。

                       * 例如:螢幕方向改變時,activity被銷毀在重建;目前activity處于背景,系統資源

                       * 緊張将其殺死。

                       * 另外,當跳轉到其他activity或者按home鍵回到主屏是該方法也被調用,系統為了儲存

                       * 目前view元件,在onpause之後前被調用。

                      protected void onsaveinstancestate(bundle outstate) {

                            system.out.println("onsaveinstancestate");

                            super.onsaveinstancestate(outstate);

                       * activity被系統殺死後再重建時被調用

                       * 例如:螢幕方向改變時,activity被銷毀在重建,目前activity處于背景,系統

                       * 資源緊張将其殺死,使用者又啟動該activity,這兩種情況下onrestoreinstancestate

                       * 都被調用,在onstart之後。

                      protected void onrestoreinstancestate(bundle savedinstancestate) {

                            system.out.println("onrestoreinstancestate");

                            super.onrestoreinstancestate(savedinstancestate);

                      public void click(view view) {

                            intent intent = new intent(this,secondactivity.class);

                            startactivity(intent);

}

7 secondactivity的内容如下:

package com.itheima.lifecycle;

import android.app.activity;

import android.os.bundle;

public class secondactivity extends activity {

         @override

         protected void oncreate(bundle savedinstancestate) {

                   super.oncreate(savedinstancestate);                                                               

                   setcontentview(r.layout.activity_second);

         }

繼續閱讀