Android Activity 啟動模式和任務棧

2021-09-08 19:08:39 字數 1482 閱讀 8835

android activity 常用技巧

android activity 啟動模式和任務棧

android 頁面跳轉之生命週期呼叫順序問題

一般情況下,返回鍵和呼叫finish方法會移除頂部的activity,然後讓後面的activity恢復活動,但是這也就是在一般情況下。androidmainfest.xml檔案下面的屬性 android:launchmode或者intent的flag能夠打破這種狀態。

下面會先介紹一下androidmainifest的啟動模式

預設的啟動模式,如果不指定activity的啟動模式,則使用這種方式來啟動activity,這種模式下,每次啟動都會建立新的例項,建立後的activity都會覆蓋在原activity上面.下圖展示的就是此啟動模式下的棧的狀態:

如果指定啟動activity為singletop模式,啟動時會判斷當前棧頂是不是要啟動的activity,如果是則不建立新的activity而是直接引用這個activity,如果不是則建立新的activity,這種模式通常適用於接受到訊息後顯示的介面。這種啟動模式不會建立新的activity,但在啟動activity的時候呼叫onnewintent()方法。舉個例子來說,當任務棧中有a、b、c三個activity,而c的啟動模式是singletop的,那麼在此啟動c的時候,系統就不會建立c的例項了,而是會呼叫c的onnewintent方法,當前任務棧中依然是a、b、c三個activity。

通過檢視上圖,我們也可以知道,使用這個模式建立的activity不是在新的任務棧中被開啟,就是將已開啟的activity切換到前台。使用的環境,讀者自己去領悟吧,在這裡就不多贅述了。

宣告為singleinstance的activity會出現在乙個新的任務棧裡面,這個任務棧只存在這乙個activity。此activity被建立後是被共享的,也就是說再次啟用此activity的時候是不需要建立例項的,而是直接調出此activity。

注意:如果在乙個singletop 或者 singleinstance 的activitya中通過startactivityforresult()方法來啟動乙個activityb,那麼系統將直接返回activity.result_canceled而不會再去等待返回,這是由於系統在framework層做了對這兩種啟動模式的限制,因為android開發者認為不同的task中間,預設是不能傳遞資料的,如果一定要傳遞,那就只能通過intent。

除了在androidmainfest宣告啟動方式,也可以通過intent來宣告此次啟動activity的方式。 還有一些在androidmainfest裡面做清理任務棧和其他的操作的標籤,通過看相關的api文件能夠很容易的了解到。這裡不做過多的描述。還有就是,了解activity的任務棧了,但是不要濫用,一定要根據專案的實際需求來使用任務棧.

android activity啟動模式

1.標準模式 standrad 沒啟動乙個activity,都會建立乙個activity例項,放入回退棧的內部 2.單頂模式 singletop 當啟動launchmode是 singletop的時候,系統會先判斷棧頂是不是要啟動的那個activity例項,如果是,則不會建立新的例項,直接讓棧頂直接...

Android Activity啟動模式

在androidmanifest.xml中配置 android name mainactivity android launchmode standard 有以下四種 standard 預設模式,每次通過intent啟動activity時都會建立乙個新的activity例項,並放入任務棧中。sing...

android Activity切換動畫

今天準備比賽的時候 遇到了這個問題。查了些資料總結了下。主要是通過 android theme 標籤來實現 android theme style 那麼就需要自己寫style風格檔案 如下 這裡之所以寫成2style個是為了解耦然後自己寫下anim anim enter anim anim exit...