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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Activity详细解释(生命周期、以各种方式启动Activity、状态保存,等完全退出)...

發布時間:2025/3/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Activity详细解释(生命周期、以各种方式启动Activity、状态保存,等完全退出)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是Activity?

??? 簡單的說:Activity或者懸浮于其它窗體上的交互界面。

在一個應用程序中通常由多個Activity構成。都會在Manifest.xml中指定一個主的Activity,例如以下設置

<actionandroid:name="android.intent.action.MAIN" />

當程序第一次執行時用戶就會看這個Activity,這個Activity能夠通過啟動其它的Activity進行相關操作。當啟動其它的Activity時這個當前的這個Activity將會停止,新的Activity將會壓入棧中,同一時候獲取用戶焦點,這時就可在這個Activity上操作了。都知道棧是先進后出的原則,那么當用戶按Back鍵時,當前的這個Activity銷毀。前一個Activity又一次恢復。

二、Activity生命周期

先看下圖:

這個圖不再多說什么,以下我們通過一個實例來說明問題。

新建project,編寫例如以下代碼:

package com.android.ttx.actiitylifedemo; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; public class ActivityLifeDemo extends Activity {private final static String TAG="ActivityLifeDemo";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Log.i(TAG, "onCreate");}@Overrideprotected void onStart() {Log.i(TAG, "onStart");super.onStart();}@Overrideprotected void onRestart() {Log.i(TAG, "onRestart");super.onRestart();}@Overrideprotected void onResume() {Log.i(TAG, "onResume");super.onResume();}@Overrideprotected void onPause() {Log.i(TAG, "onPause");super.onPause();}@Overrideprotected void onStop() {Log.i(TAG, "onStop");super.onStop();}@Overrideprotected void onDestroy() {Log.i(TAG, "onDestroy");super.onDestroy();} }

代碼非常easy,僅僅涉及到一個Activity,一些用戶的操作,我們通過記錄操作和打印日志的方式來看看Activity的生命周期過程。

1、? 執行
看到例如以下打印日志:
08-31 08:46:53.916: INFO/ActivityLifeDemo(312): onCreate
08-31 08:46:53.916: INFO/ActivityLifeDemo(312): onStart
08-31 08:46:53.916: INFO/ActivityLifeDemo(312): onResume
2、按下返回按鍵:
08-31 09:29:57.396: INFO/ActivityLifeDemo(354): onPause
08-31 09:29:58.216: INFO/ActivityLifeDemo(354): onStop
08-31 09:29:58.216: INFO/ActivityLifeDemo(354): onDestroy
3、長按Home鍵。彈出近期打開過的應用程序,點擊ActivityLifeDemo
08-31 08:51:46.916: INFO/ActivityLifeDemo(312): onCreate
08-31 08:51:46.916: INFO/ActivityLifeDemo(312): onStart
08-31 08:51:46.936: INFO/ActivityLifeDemo(312): onResume
4、按Home鍵
08-31 08:53:32.676: INFO/ActivityLifeDemo(312): onPause
08-31 08:53:33.796: INFO/ActivityLifeDemo(312): onStop
5、在AllList中點擊打開
08-31 08:54:14.286: INFO/ActivityLifeDemo(312): onRestart
08-31 08:54:14.286: INFO/ActivityLifeDemo(312): onStart
08-31 08:54:14.296: INFO/ActivityLifeDemo(312): onResume

通過日志信息。我們能夠看到。Activity的啟動過程:onCreate—onStart—onResume;下返回鍵時:onPause—onStop—onDestroy 正如上面說是,當按下返回鍵時,此Activity彈出棧。程序銷毀。確實如此。我們再次 打開時的啟動過程又回到onCreate—onStart—onResume。OK,啟動之后按下Home鍵。回到Launcher。查看信息打印:onPause—onStop。再次打開的執行過程:onRestart—onStart—onResume。

我們通過對Activity的各種操作,構成了Activity的生命周期,我們看到不管對Activity做怎樣的操作,都會接收到相關的回調方法,那么我們在開發的過程中通過這些回調方法就能夠寫工作,比方說釋放一些重量級的對象。網絡連接,數據庫連接,文件讀等等。

下面是各個方法的具體說明:

onCreate():當?activity?第一次創建時會被調用。

在這種方法中你須要完畢全部的正常靜態設置?,比方創建一個視圖(?view?)、綁定列表的數據等等。

假設能捕獲到?activity?狀態的話,這種方法傳遞進來的?Bundle?對象將存放了?activity?當前的狀態。

調用該方法后通常會調用?onStart()?方法。

onRestart():在?activity?被停止后又一次啟動時會調用該方法。其興許會調用?onStart?方法。

onStart()à當?activity?對于用戶可見前即調用這種方法。假設?activity回到前臺則接著調用?onResume()?。假設?activity?隱藏則調用onStop()

onResume():在?activity?開始與用戶交互前調用該方法。在這時該activity?處于?activity?棧的頂部,而且接受用戶的輸入。

其興許會調用?onPause()?方法。

onPause():在系統準備開始恢復其他?activity?時會調用該方法。

這種方法中通經常使用來提交一些還沒保存的更改到持久數據?中。停止一些動畫或其他一些耗?CPU?的操作等等。不管在該方法里面進行不論什么操作。都須要較高速完畢,由于假設它不返回的話,下一個?activity?將無法恢復出來。

假設?activity?返回到前臺將會調用?onResume()?,假設?activity?變得對用戶不可見了將會調用onStop()?。

onStop():在?activity?對用戶不可見時將調用該方法。可能會由于當前?activity?正在被銷毀。或還有一個?activity?(已經存在的activity?或新的?activity?)已經恢復了正準備覆蓋它,而調用該方法。假設?activity?正準備返回與用戶交互時興許會調用onRestart?,假設?activity?正在被釋放則會調用?onDestroy?。

onDestroy():在?activity?被銷毀前會調用該方法。

這是?activity?能接收到的最后一個調用。可能會由于有人調用了?finish?方法使得當前activity?正在關閉,或系統為了保護內存暫時釋放這個?activity的實例,而調用該方法。你能夠用?isFinishing?方法來區分這兩種不同的情況。

三、怎樣啟動一個新的Activity?

要啟動一個新的Activity。我們能夠通過調用Context中的startActivity來啟動。像這樣:

Intent intent = new Intent(this, ActivityDemo.class); startActivity(intent); // ActivityDemo是須要啟動的Activity類
通過上面的方法能夠啟動新的Activity了,但假設我要從當前的Activity中傳遞數據到新的Activity呢?非常easy:
Intent intent = new Intent(this,ActivityDemo.class); Bundle bundle = new Bundle(); bundle.putBoolean("bool_key", true); intent.putExtras(bundle); startActivity(intent);

還有,有時候我們須要啟動帶返回值的Activity。簡單的說就是須要新啟動的Activity返回時將值傳遞給啟動它的Activity。像這樣:

Intent intent = new Intent(ActivityLifeDemo.this,RevalueActivity.class); startActivityForResult(intent, 0x1001);
ActivityLifeDemo是當前的Activity。啟動RevalueActivity,我們在ActivityLifeDemo中須要獲取RevalueActivity傳回來的值。

那么在RevalueActivity中就必須這樣寫:

Intent intent = new Intent(); intent.putExtra("revalue_key","haha-revalueActivity"); setResult(0x1001, intent);那么“revalue_key”值在哪里獲取呢?必須重寫onActivityResult方法。通過推斷requestCode,來確定

if(requestCode==0x1001){String str = data.getStringExtra("revalue_key");Log.i(TAG, "返回的值為:"+str);}

好了。具體的請看代碼吧。下載地址:http://download.csdn.net/detail/tangcheng_ok/3580700

?

四、保存Activity執行狀態

通過重寫onSaveInstanceState()方法來實現Activity的執行狀態。請注意下面幾點:

1)因為activity?對象被暫停或停止時,它仍然保留在內存里面,關于它的成員信息和當前狀態都是活動的,所以此時能夠保存Activity的狀態,從而使用戶所作的Activity的更改保存在內存中

2)? 當系統回收內存而將Activity銷毀時,就無法保存其狀態,所以須要調用onSaveInstanceState()方法來實現狀態的保存

3)? 非常多情況并不須要保持狀態信息,比方按下返回鍵直接關閉程序。所以并不能保證會調用onSaveInstanceState。假設調用了該方法。通常是在onStop?方法之前且可能在?onPause?之后調用。雖然如此,即使你沒做不論什么操作或沒有實現?onSaveInstanceState()?方法,你的?activity?狀態也能通過Activity?類里面默認實現的?onSaveInstanceState?方法恢復出來。

特別是會為布局中的視圖(?View?)默認調用onSaveInstanceState?方法。并在這種方法中同意每個視圖提供它須要恢復的不論什么信息。差點兒每個?Android框架中的?widget?都視情況實現了這種方法。

注:由于?onSaveInstanceState?方法不一定會被調用。所以你應該僅僅是用它來保存一些?activity?的轉換過程狀態(即?UI?的狀態),而不能用來保存永久性數據。但你能夠用?onPause?方法在用戶離開?activity?時來保存永久性數據。比方須要保存到數據庫的數據。

有一個非常好的方法能夠用來檢驗應用程序保存狀態的能力。就是簡單地旋轉你的設備來改變屏幕的方向。由于當屏幕方向改變時,系統為了給新的方向提供一個可能合適的取代資源,會銷毀?activity?并新建一個新的。

由于這個原因,你的?activity?能否在其又一次創建時完畢保存狀態就顯得尤為重要,由于用戶常常會在使用應用程序時旋轉屏幕的。

上文部分內容參考了:http://blog.csdn.net/sam_zhang1984/article/details/6430817,在這里多謝這位博主了。

五、全然退出程序

通過上面的介紹,我們知道當點擊back鍵時。程序調用了onDestroy方法。程序退出了,可是我們查看其進程,發現調用了onDestroy方法之后這個Activity還在執行。

甚至調用了finish()方法之后程序還能在進程中看到。通過以下這樣的方式能夠實現程序的全然退出:

Intent intent = new Intent(); Intent.setClass(context,MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra(“flag”,EXIT_APPLICATION); context.startActivity(intnet);
ok。到目前為止。

這篇文章的制備。


總結

以上是生活随笔為你收集整理的Activity详细解释(生命周期、以各种方式启动Activity、状态保存,等完全退出)...的全部內容,希望文章能夠幫你解決所遇到的問題。

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