當前位置:首頁 » 安卓系統 » androidsingletask

androidsingletask

發布時間: 2022-05-26 02:14:50

① android singletask模式下廣播在ondestory方法里解綁為什麼不能執行

因為
android singletask模式下調用finish();是不會走
ondestory();方法的

② android singletask怎麼再次走生命周期

一個activity就只有一個生命周期,如果它已處於停止狀態,它已被銷毀(destory),如果你的意思是再次回到該activity,那你只能在Task中在壓入一個新的activity(用intent setClass,然後startActivity)

③ android新手 singleTask

在多Activity開發中,有可能是自己應用之間的Activity跳轉,或者夾帶其他應用的可復用Activity。可能會希望跳轉到原來某個Activity實例,而不是產生大量重復的Activity。

這需要為Activity配置特定的載入模式,而不是使用默認的載入模式。

載入模式分類及在哪裡配置

Activity有四種載入模式:

standard

singleTop

singleTask

singleInstance

設置的位置在AndroidManifest.xml文件中activity元素的android:launchMode屬性:

<activity
android:name="ActB"android:launchMode="singleTask"></activity>

也可以在Eclipse
ADT中圖形界面中編輯:

另外,可以看到兩個Activity的taskId是不同的。

④ Android 深入探討sigleTask和singletop的區別

1.singleTask和singletop都是保真了Activity在棧中的唯一性

2.singleTask和singleTop實例存在時,都不會重新創建 new task

不同之處有如下幾點:

如果singleTask啟動的ActivityA位於棧底,在棧頂startActivity到這個ActivityA時會調動
onNewIntent->onStart->onResume。

但singleTask啟動的的ActivityA不存在時,會重新創建ActivityA,調用方式OnCreate->OnStart->OnResume

2.如果singletop啟動的ActivityB在棧底時,在棧頂startActivity到這個ActivityB時會重新調動
onCreate->onStart->onResume,但不會調用OnDestroy

並且singletop啟動的的ActivityB不存在時,會重新創建ActivityB,調用方式OnCreate->OnStart->OnResume

3.singleTask在棧底時,從棧頂startActivity到棧底ActivityA,那麼該棧startActivity的發起者的中間部分Activity會被銷毀。而singletop是逐級跳躍到棧頂

singleTask

追加一點singleInstance,雖然也是保證唯一性,但改模式的Activity是全局性的唯一性,生命周期和應用程序相同,不能及時回收,此外的話Activity在MVC充當Controller的角色,

這點顯然對singleIntance來說不適合,因此不建議使用。

4.singleTask不適合充當ChildActivity,但singletop適合

5.對作業棧,默認情況下,沒有任何影響,因為棧的taskid是相同的,可以獲取getTaskid(),默認情況下每個activity的taskid相同

但是,如果自定義了棧的標簽(這個標簽相同的singletask activity在同一個作業棧中),那麼taskid就會初選差別

android:taskAffinity="com.sample.lanchmode.tester.main",那麼一旦另一個作業棧被銷毀,下次必然重建(相信我,這不是廢話)。

為了一句不是廢話,我需要來證明一下。

當我們的初始載入WelcomeActivity界面--->HomeActivity界面時,如果將HomeActivity的啟動模式設置為sigleTask+android:taskAffinity="自定義(一般是類名)",

①那麼WelcomeActivity銷毀後,在到達HomeActivity之後,HomeActivity回作為一個新的作業棧棧底而存在,所以由HomeActivity啟動的Activity的TaskId和HomeActivity相同。

②這個過程,WelcomeActivity和HomeActivity的TaskId是不相同的,問題出現了,當我們按下 Home鍵,然後在點擊桌面上的app圖標你會發現,WelcomeActivity再次出現了,

而且再次進入了HomeActivity,並且這個HomeActivity調用了OnNewIntent,卻沒掉用OnCreate,所以來說他一直存在這,但你需要再次過渡才能找到它。

(對於追求捕獲Home鍵讓app退出的讀者是一個喜訊,這樣可以做到每次Home之後都能再次進入登錄界面),在這個過程中沒有直接進入HomeActivity,而是WelcomeActivity(有人說不對么,不應該是這樣么,在這里不想解釋)。

注意,使用了不同作業棧的Activity,會在最近打開的app顯示一個應用會出現2個界面。

在這里,需要強調一下singleTask+android:taskAffinity不一定必須使用,請依據需求而定,網上有人推薦使用,但我卻想說,不要盲目,並不是所有的應用都適合。

1-->
singleTask+android:taskAffinity對於效率而言,優勢並不存在,比如設置進程的,但對於帶有登錄狀態的app需要慎用,否則造成信息泄露等問題,開發中只使用singleTask即可。

2-->
singleTask+android:taskAffinity適用於單用戶保密性的app(可做到Home之後下次必須登錄才能查看信息),建議在這方面試試。

轉載

⑤ android啟動模式設置為single task任務棧為什麼

在Android中每個界面都是一個Activity,切換界面操作其實是多個不同Activity之間的實例化操作。在Android中Activity的啟動模式決定了Activity的啟動運行方式。 Android總Activity的啟動模式分為四種: Activity啟動模式設置: <activity android:name=".MainActivity" android:launchMode="standard" /> Activity的四種啟動模式: 1. standard 模式啟動模式,每次激活Activity時都會創建Activity,並放入任務棧中。 2. singleTop 如果在任務的棧頂正好存在該Activity的實例, 就重用該實例,否者就會創建新的實例並放入棧頂(即使棧中已經存在該Activity實例,只要不在棧頂,都會創建實例)。 3. singleTask 如果在棧中已經有該Activity的實例,就重用該實例(會調用實例的onNewIntent())。重用時,會讓該實例回到棧頂,因此在它上面的實例將會被移除棧。如果棧中不存在該實例,將會創建新的實例放入棧中。 4. singleInstance 在一個新棧中創建該Activity實例,並讓多個應用共享改棧中的該Activity實例。一旦改模式的Activity的實例存在於某個棧中,任何應用再激活改Activity時都會重用該棧中的實例,其效果相當於多個應用程序共享一個應用,不管誰激活該Activity都會進入同一個應用中。 其中standard是系統默認的啟動模式。 下面通過實例來演示standard的運行機制: 1 private TextView text_show; 2 private Button btn_mode; 3 4 @Override 5 public void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_main); 8 9 text_show = (TextView) this.findViewById(R.id.text_show); 10 11 text_show.setText(this.toString()); 12 13 btn_mode = (Button) this.findViewById(R.id.btn_mode); 14 15 } 16 //按鈕單擊事件 17 public void LaunchStandard(View v){ 18 startActivity(new Intent(this,MainActivity.class)); 19 20 text_show.setText(this.toString()); 21 }

⑥ Android四種啟動模式在什麼時候使用

standard(默認)
系統默認的啟動模式。
Android是使用返回棧來管理活動的,在standard模式下,每當啟動一個新的活動,它就會在返回棧中入棧,並處於棧頂的位置。
對於使用standard模式的活動,系統不會在乎這個活動是否已經在返回棧中存在,而是每次啟動活動都會創建該活動的一個新的實例。

singleTop
android:launchMode="singleTop"
當活動的啟動模式指定為singleTop,在啟動活動時,如果發現該返回棧的棧頂已經是該活動時,則認為可以直接使用它,不會在創建新的活動實例

singleTask
當活動的啟動模式指定為singleTask,每次啟動該活動時,首先會在返回棧中檢查是否存在該活動的實例,如果發現已經存在就直接使用該實例,並把這個活動之上的所有活動統統出棧,如果沒有發現就會創建一個新的活動實例。
android:launchMode="singleTask"

singleInstance
指定為singleInstance模式的活動會啟用一個新的返回棧來管理這個活動,不管是哪個應用程序來訪問這個活動,都共用的同一個返回棧,解決了共享活動實例的問題
修改SecondActivity的啟動模式
android:launchMode="singleInstance"

使用方式:

standard:怎麼樣都要創建
singleTop:頂上不是target Activity,new一個
singleTask:頂上不是target Activity,移除target之上的,把自己變成top。
singleInstance:開辟私有的task,完全獨立於程序的其他activity的task。

使用場景:
standard:普通activity
singleTop:要展示推送過來的消息
singleTask:程序入口等啟動頁面
singleInstance:完全獨立的,類似鬧鍾的提示

⑦ android singletask為什麼沒有作業

在多Activity開發中,有可能是自己應用之間的Activity跳轉,或者夾帶其他應用的可復用Activity。可能會希望跳轉到原來某個Activity實例,而不是產生大量重復的Activity。 這需要為Activity配置特定的載入模式,而不是使用默認的載入模式

⑧ Android設置launchMode為singleTask的Activity怎麼刷新頁面內容

在需要啟動另一個activity,並傳遞一些數據時,我們常採取如下的方法:
Intent intent = new Intent(this, ActivityB.class);

intent.putExtra("name", mUserName);

startActivity(intent);

同時在ActivityB中的onCreate()或onResume()方法中獲取傳遞的數據:

Bundle bundle = getIntent().getExtras();

if (bundle != null && bundle.containsKey("name")) {

mUserName = bundle.getString("name");

}

但是,當把ActivityB的載入方式設置為singleTask或singleInstance時,我們會發現,除了第一次能正確接收以外,其他的好像都是為空?

原來,activity的getIntent()方法只是獲取activity原來的intent。因此要想解決上述問題,可採用的辦法之一是重載onNewIntent()方法。

@Override

protected void onNewIntent(Intent intent) {

super.onNewIntent(intent);

setIntent(intent);

//here we can use getIntent() to get the extra data.

⑨ android 怎麼實現返回主界面

1.
將主頁面activity設置為singleTask啟動方法。
2.
直接在返回的時候跳轉到主頁面即可。
代碼如下:
//MainActivity為你的主頁面activity,activity為現在的頁面
Intent i = new Intent(activity.this,MainActivity.class)
startActivity(i);
原理:當activity為singleTask的時候跳轉會清空當前activity任務棧上面所有的activity。

⑩ 如何很好的理解安卓的四種開發模式

安卓中的是四種啟動模式分別為standerd,singletop,singletask,singleInstance。
standerd是標准啟動模式,也就是默認的啟動的模式。這種模式每次都會創建一個新的實例,在退出的時候在分別出棧。
singleTop每次創建時,會先看看棧中的棧頂有沒有改實例,如果有就拿來用,沒有就自己創建。

熱點內容
酷豐c10出廠密碼多少 發布:2024-05-02 09:23:33 瀏覽:376
開發安卓游戲需要會什麼 發布:2024-05-02 09:04:22 瀏覽:977
無線網密碼忘了手機怎麼改 發布:2024-05-02 08:57:24 瀏覽:527
iis上傳文件許可權設置 發布:2024-05-02 08:56:39 瀏覽:232
ipad文件加密 發布:2024-05-02 08:20:30 瀏覽:442
粉土壓縮模量 發布:2024-05-02 07:53:59 瀏覽:805
國都證券初始密碼是多少 發布:2024-05-02 07:46:39 瀏覽:109
shell腳本和linux命令行 發布:2024-05-02 07:37:54 瀏覽:968
自己的伺服器搭建微信小程序商城 發布:2024-05-02 07:36:26 瀏覽:426
php單行注釋 發布:2024-05-02 07:36:22 瀏覽:958