1樓:千鋒教育
要達到這個需求,可以設定activity的啟動模式為singletask或者singleinstance
activity一共有4中啟動模式
standard
預設模式,可以不用寫配置。在這個模式下,都會預設建立一個新的例項。因此,在這種模式下,可以有多個相同的例項,也允許多個相同activity疊加。
例如:若有一個activity名為a1, 上面有一個按鈕可跳轉到a1。那麼如果點選按鈕,便會新啟一個activity a1疊在剛才的a1之上,再點選,又會再新啟一個在它之上……
點back鍵會依照棧順序依次退出。
singletop
可以有多個例項,但是不允許多個相同activity疊加。即,如果activity在棧頂的時候,啟動相同的activity,不會建立新的例項,而會呼叫其onnewintent方法。
例如:若有兩個activity名為b1,b2,兩個activity內容功能完全相同,都有兩個按鈕可以跳到b1或者b2,唯一不同的是b1為standard,b2為singletop。
若我意圖開啟的順序為b1->b2->b2,則實際開啟的順序為b1->b2(後一次意圖開啟b2,實際只呼叫了前一個的onnewintent方法)
若意圖開啟的順序為b1->b2->b1->b2,則實際開啟的順序與意圖的一致,為b1->b2->b1->b2。
singletask
只有一個例項。在同一個應用程式中啟動的時候,若activity不存在,則會在當前task建立一個新的例項,若存在,則會把task中在其之上的其它activity destory掉並呼叫它的onnewintent方法。
如果是在別的應用程式中啟動它,則會新建一個task,並在該task中啟動這個activity,singletask允許別的activity與其在一個task中共存,也就是說,如果在這個singletask的例項中再開啟新的activity,這個新的activity還是會在singletask的例項的task中。
例如:若應用程式中有三個activity,c1,c2,c3,三個activity可互相啟動,其中c2為singletask模式,那麼,無論在這個程式中如何點選啟動,如:c1->c2->c3->c2->c3->c1-c2,c1,c3可能存在多個例項,但是c2只會存在一個,並且這三個activity都在同一個task裡面。
但是c1->c2->c3->c2->c3->c1-c2,這樣的操作過程實際應該是如下這樣的,因為singletask會把task中在其之上的其它activity destory掉。
操作:c1->c2 c1->c2->c3 c1->c2->c3->c2 c1->c2->c3->c2->c3->c1 c1->c2->c3->c2->c3->c1-c2
實際:c1->c2 c1->c2->c3 c1->c2 c1->c2->c3->c1 c1->c2
若是別的應用程式開啟c2,則會新啟一個task。
如別的應用other中有一個activity,taskid為200,從它開啟c2,則c2的taskidi不會為200,例如c2的taskid為201,那麼再從c2開啟c1、c3,則c2、c3的taskid仍為201。
注意:如果此時點選home,然後再開啟other,發現這時顯示的肯定會是other應用中的內容,而不會是應用中的c1 c2 c3中的其中一個。
singleinstance
只有一個例項,並且這個例項獨立執行在一個task中,這個task只有這個例項,不允許有別的activity存在。
例如:程式有三個activityd1,d2,d3,三個activity可互相啟動,其中d2為singleinstance模式。那麼程式從d1開始執行,假設d1的taskid為200,那麼從d1啟動d2時,d2會新啟動一個task,即d2與d1不在一個task中執行。
假設d2的taskid為201,再從d2啟動d3時,d3的taskid為200,也就是說它被壓到了d1啟動的任務棧中。
若是在別的應用程式開啟d2,假設other的taskid為200,開啟d2,d2會新建一個task執行,假設它的taskid為201,那麼如果這時再從d2啟動d1或者d3,則又會再建立一個task,因此,若操作步驟為other->d2->d1,這過程就涉及到了3個task了。
2樓:匿名使用者
可以在manifest.xml中為activity設定android:launchmode,
啟動模式有以下幾種:
standard:預設啟動模式,每次啟用activity時都會建立activity,並放入任務棧中
singletop:如果該activity例項在任務棧的頂部,就重用該例項物件,否則就建立新的例項並放入棧頂
singletask:如果在棧中已經有該activity例項,就重用該例項物件(會**activity中的onnewintent方法)會將該例項放置棧頂,並將它上面的例項移除
singleinstance:在一個新棧中建立activity例項,並讓多個應用共享該棧中的該activity例項,一旦該模式的activity例項存在於某個棧中,任何應用再啟用該activity時都會重用該棧的例項。
3樓:
給activity設定flag。
android 怎麼activity跳轉本activity
4樓:
你的思路可能出現問題了,想想為什麼要自己跳轉到自己,有什麼意義嗎?你已經在當前的activity了,跳回來幹嘛,如果需要實現什麼邏輯,可以考慮通過切換view來實現
5樓:匿名使用者
startactivity啊
6樓:匿名使用者
跟開啟其他的一樣,注意lanchmode
7樓:好程式設計師
startactivity(new intent(this,this.class))
android程式設計 android中如何獲取螢幕大小
display display getwindowmanager getdefaultdisplay point size new point display.getsize size int width size.x int height size.y 獲取螢幕尺寸大小,是程式能在不同大小的手機上...
Android如何實現WebSocket,該選擇哪個庫
相容copy類庫 actionbarsherlock action bar是android 3.0後才開始支援 android怎樣使用websocketclient 我是寫了一個websocketclient的子類,接收到的訊息用內handler傳送,在ui介面解析容,操作.只不過多加了一個,get...
android如何根據imageview大攜態改變包裹它的
android動態改變view控制元件大小的方法 1 宣告控制元件引數獲取物件 layoutparams lp 2 獲取控制元件引數 lp 控制元件id.getlayoutparams 3 設定控制元件引數 如高度。lp.height 10 4 使設定生效 控制元件id.setlayoutparam...