【Android】SingleTask與SingleInstance的區別

來源:互聯網
上載者:User

現有2個項目,taskA、taskB。taskA負責調用taskB中指定的介面。

taskB中有3個介面,a、b、c,每個介面顯示它所在的task id。

SingleTask:

其中b介面被聲明為SingleTask。

先運行taskB,顯示a介面,由a介面調用b介面,這時b介面的taskid與a介面的taskid是一致的,說明b介面與a介面在同一個task中;由b介面調用c介面時,c介面的taskid與a和b介面的taskid一致,說明這三個介面是在同一個task中。當前顯示的是c介面,此時按Home鍵回到案頭,運行taskA的介面調用taskB的b介面,這時b介面顯示出來,它的taskid沒有變,還是之前的taskid,只不過之前顯示的是c介面,這時c介面已經不知所蹤,這時再按back鍵,則回到了a介面,然後是taskA的介面。

這說明,SingleTask所標註的Activity在被自身的app調用時,是不建立task的,同時,如果系統中存在了這個SingleTask介面的執行個體時,會將其所在的task切換到前台,並把SingleTask介面之後開啟的其他介面全部關閉(有待考證是否關閉)。

另外有一種情況,例如:a介面被調用,這時按Home鍵返回到案頭,啟動taskA,並調用b介面,這時b介面的taskid與a介面的一致,說明b介面與a介面同屬於一個task。如果直接運行taskA調用b介面,b的taskid與taskA的介面的taskid不同,說明在新task中執行個體化了b介面,由b介面調用c介面,c介面的taskid與b介面一致,說明b與c同屬於一個task。

SingleInstance:

將b介面聲明為SingleInstance。

先運行taskB,顯示a介面,由a介面調用b介面,這時b介面的taskid與a介面的taskid不同,說明b介面是在新task中產生的執行個體;由b介面調用c介面,c介面的taskid與a介面的taskid相同,說明a、c介面同屬於一個task。

由此可以看出SingleTask與SingleInstance是有本質區別的,而不是像網上說的那樣,都是task的root activity,這是有錯誤的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.