㈠ android每個應用都有一個堆棧task來存放啟動的Activity實例我不能理taskid在實際開發中的作用是什麼
在開發中,Task的概念應該是與Activity棧相對應的。
換言之,Activity通過不同的啟動模式去啟動,所處的Task是不一樣的(如singletask)。
相應的也就會對畫面遷移和內存分配等問題產生影響。
暫時就想到這些~
㈡ android堆棧的問題 壓棧退棧 求救啊!
這個應該不需要自己處理吧,安卓框架Activity棧自己就處理了吧。入棧是A --> C --> C1 --> B根據棧的特性,那出棧肯定就是 B C1 C A
㈢ 如何獲得當前的activity android
android開發中獲取當前的Activity有多種情況;
在Activity中,this就是當前的Activity,例如this.startActivity。
在Fragment中可以通過 getActivity()來得到當前裝載這個Fragment的Activity。
通過Activity堆棧來獲取當前顯示的這個Activity
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
㈣ Activity四種啟動模式有哪些
Activity的啟動模式可以通過AndroidManifest.xml文件中的<activity>元素的屬性來指定,一共有4中模式:
<activity android:name="ActivityMain" android:launchMode="singleTask"></activity>
1 standard
2 singleTop
3 singleTask
4 singleInstance
這4中模式又分兩類,standard和signleTop屬於一類, singleTask和signleInstance屬於另一類。
standard和singleTop屬性的 Activity 的實例可以屬於任何任務(Task),並且可以位於Activity堆棧的任何位置。比較典型的一種情況是,一個任務的代碼執行 startActivity(),如果傳遞的 Intent 對象沒有包含 FLAG_ACTIVITY_NEW_TASK 屬性, 指定的 Activity 將被該任務調用,從而裝入該任務的Activity 堆棧中。 standard和singleTop的區別在於:standard模式的Activity在被調用時會創建一個新的實例,所有實例處理同一個 Intent對象; 但對於singleTop模式的Activity,如果被調用的任務已經有一個這樣的Activity 在堆棧的頂端,那麼不會有新的實例創建, 任務會使用當前頂端的Activity實例來處理Intent對象,換句話說,如果被調用的任務包含一個不在堆棧頂端的 singleTop Activity, 或者堆棧頂端為 singleTop 的Activity的任務不是當前被調用的任務,那麼,仍然會有一個新的Activity對象被創建。
singleTask 和 singleInstance模式的Activity 僅可用於啟動任務的情況, 這種模式的Activity總是處在Activity堆棧的最底端,並且一個任務中只能被實例化一次。兩 者的區別在於:對於 singleInstance模式的Activity, 任務的Activity堆棧中如果有這樣的Activity,那它將是堆棧中的唯一的 Activity, 當前任務收到的 Intent 都由它處理, 由它開啟的其他 Activity 將在其他任務中被啟動; 對於 SingleTask模式的Activity,它在堆棧底端,其上方可以有其他Activity被創建, 但是,如果發給該Activity的Intent對象到來時該Activity不在堆棧頂端,那麼該Intent對象將被丟棄,但是界面還是會切換到當前 的Activity。
在多Activity開發中,有可能是自己應用間的activity 跳轉,或者夾帶其他應用的可復用activity。可能會希望跳轉到原來某個activity實例,而非產生多個重復的activity。我們可藉助 activity 四種啟動模式來實現不同的需求:
standard 默認模式 --------- 來了intent,每次都創建新的實例。
singleTop -------- 來了intent, 每次都創建新的實例,僅一個例外:當棧頂的activity 恰恰就是該
activity的實例(即需要創建的實例)時,不再創建新實例。這解決了棧頂復用問題,想一想,你按兩次back鍵,退出的都是同一個activity,這感覺肯定不爽。
singleTask ---------- 來了intent後,檢查棧中是否存在該activity的實例,如果存在就把intent發送給它,否則就創建一個新的該activity的實例,放入 一個新的task棧的棧底。肯定位於一個task的棧底,而且棧中只能有它一個該activity實例,但允許其他activity加入該棧。解決了在一 個task中共享一個activity。
singleInstance ----------- 肯定位於一個task的棧底, 並且是該棧唯一的activity。解決了多個task共享一個activity。
㈤ android 中怎樣能夠清除activity堆棧,也就是退出整個應用
如果退出整個程序,如下操作:方式一:Intent intent=new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_HOME);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);this.startActivity(intent);System.exit(0); 方式二:android.os.Process.killProcess(android.os.Process.myPid()); android 完全退出程序有幾個activity,有一需求是在一個activityA點擊back鍵退出系統而不是跳到之前的activity首先想到的是清空activityA的堆棧,使用intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 但是該activityA不是已經存在於堆棧底端的,所以清除的只是堆棧中該activityA上面的activity,但後退後還是會返回堆棧中該activityA下面的activity。
㈥ android 彈出dialog時activity的生命周期處在什麼狀態
處於pause狀態。
當 Activity失去焦點, 被一個新的非全屏的Activity 或者一個透明的Activity (如彈窗dialog)被放置在棧頂,此時的狀態叫做暫停狀態(Paused)。
此時它依然與窗口管理器保持連接,Activity依然保持活力(保持所有的狀態,成員信息,和窗口管理器保持連接),但是在系統內存極端低下的時候將被強行終止掉。所以仍然可見,但已經失去了焦點故不可與用戶進行交互。
(6)androidactivity堆棧擴展閱讀:
activity的其它狀態:
1、運行:如果當前的activity在前台界面上時(堆棧頂端)。
2、停止:如果activity完全被另一個全屏活動遮擋住時,它將會停止。該活動也仍保留全部的狀態和成員信息,但將會被隱藏起來不再展示給用戶,並且當內存在其他地方被需要時該活動就將會被系統殺死。
3、重啟:如果activity處於暫停或者停止狀態,系統將會在內存中終止該活動無論是結束活動或者殺死進程。當它再一次展示給用戶時,它必須是完全重啟並且恢復到之前的狀態。
㈦ android 怎麼查看activity堆棧
這是一個比較典型的:A是歡迎界面,B是主菜單,CD..是菜單的詳細。 A界面顯示過後finish掉,BCD activity的LAUNCH MODE設置為singletask,就會滿足你堆棧中只有一個實例的想法。