日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android的Activity生命周期模拟程序及解析

發布時間:2025/3/20 Android 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android的Activity生命周期模拟程序及解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當Activity處于Android應用中運行時,它的活動狀態由Android以Activity棧的形式管理。當前活動的Activity位于棧頂。隨著不同應用的運行,每個Activity都有可能從活動狀態轉入非活動狀態,也可能從非活動狀態轉入活動狀態。


Activity大致會經過如下4個狀態:

1.活動狀態:當前Activity位于前臺,用戶可見,可以獲得焦點。也就是位于棧頂的Activity;

2.暫停狀態:其他Activity位于前臺,該Activity仍然可見,只是不能獲得焦點,例如彈出一個對話框;

3.停止狀態:該Activity不可見,失去焦點,例如按Home鍵,切到桌面;

4.銷毀狀態:該Activity結束,或Activity所在的Dalvik進程被結束。

如下圖是Activity生命周期及相關回調方法:


在Activity的生命周期中,如下方法會被系統回調。

onCreate(Bundle savedStatus):創建Activity時會被回調,該方法在整個程序中只會被回調一次;

onStart():啟動Activity時會被回調;

onRestart():重新啟動Activity時被回調;

onResume():恢復Activity時被回調,onStart()方法之后一定會回調該方法;

onPause():暫停Activity時會被回調;

onStop():停止Activity時被回調;

OnDestroy():銷毀Activity時被回調,該方法和onCreate方法一樣,在整個程序中只會被調用一次。


下面是模擬Activity生命周期的一個小Demo。

<LifeCycleActivity.java>

package com.activity.life;import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button;public class LifeCycleActivity extends Activity {private final String TAG = "--LifeCycleActivity--";private Button start, finish;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);start = (Button) findViewById(R.id.startDialogBn);finish = (Button) findViewById(R.id.finshAppBn);// 輸出日志Log.i(TAG, "-- OnCreate --");start.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent(LifeCycleActivity.this, SecondActivity.class);startActivity(intent);}});finish.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubLifeCycleActivity.this.finish();}});}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();Log.i(TAG, "-- OnStart --");}@Overrideprotected void onRestart() {// TODO Auto-generated method stubsuper.onRestart();Log.i(TAG, "-- OnRestart --");}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();Log.i(TAG, "-- OnResume --");}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();Log.i(TAG, "-- OnPause --");}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();Log.i(TAG, "-- OnStop --");}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.i(TAG, "-- onDestroy --");} }
布局文件<main.xml>

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><Button android:id="@+id/startDialogBn"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/startDialogBn" /><Button android:id="@+id/finshAppBn"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/finshAppBn" /> </LinearLayout>
這里我用了一個第二個Activity界面來進行第一個Activity不在前臺的操作。第二個Activity?SecondActivity.java,第二個布局文件,second.xml,還有資源文件strings.xml這里就不貼代碼了。

第一步:

當我們部署Android程序到模擬器的時候,我們的程序會從入口Activity(我這里就是LifeCycleActivity)去啟動并自動執行該Activity,我們可以看到LogCat中有如下顯示信息:


可能有人會說onResume()為什么也會被回調。它不是恢復Actiivity時才被回調嗎?之前我也已經說過,在onStart()之后一定會去回調onResume()。這里只是得到了一個驗證。

第二步:

點擊了啟動按鈕。這里是啟動第二個Activity,LogCat中有如下顯示信息:


因為在第二個Activity中我沒有添加任何的日志輸出,所以沒有在第二個Activity中的任何信息。這里我們可以看到,當我們把Activity切換到第二個Activity時,也就是說該Activity不在前臺,且不可見時,這個Activity就停止了,依次回調了onPause()方法和onStop()方法。

第三步:

在第二個Activity中點擊了返回按鈕,或是直接點擊模擬器的返回鍵。LogCat中有如下顯示信息:


當我們的第一個Activity重新顯示在前臺時,系統回調了onRestart(),onStart()和onResume()方法。

第四步:

點擊Home鍵,桌面程序位于前臺。LogCat中有如下顯示信息:


第五步:

從桌面再次啟動程序。LogCat中有如下顯示信息:


我們可以看到,從桌面再次啟動程序和從第二個Activity返回到第一個Activity時,系統的回調過程是一樣的。

第六步:

點擊退出程序按鈕,退出程序。


通過這個模擬程序和相關操作的相應輸出,應該是能夠很清晰反應了Activity生命周期的狀態及在不同狀態之間切換時所回調的方法。


參考資料:《Android瘋狂講義》



總結

以上是生活随笔為你收集整理的Android的Activity生命周期模拟程序及解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。