recyclerview和listview區(qū)別 請教高人,能說下activity四種啟動模式的應(yīng)用場景嗎?
請教高人,能說下activity四種啟動模式的應(yīng)用場景嗎?應(yīng)用程序運行時,將打開一個線程,并在該線程中運行一個任務(wù)堆棧。創(chuàng)建活動實例時,它將被放入任務(wù)堆棧中?;顒訂幽J皆O(shè)置為AndroidManif
請教高人,能說下activity四種啟動模式的應(yīng)用場景嗎?
應(yīng)用程序運行時,將打開一個線程,并在該線程中運行一個任務(wù)堆棧。創(chuàng)建活動實例時,它將被放入任務(wù)堆棧中。活動啟動模式設(shè)置為AndroidManifest.xml文件文件,通過配置活動的屬性android:啟動模式=“”設(shè)置。
1. 標(biāo)準(zhǔn)模式(默認(rèn))
我們直接創(chuàng)建的活動就是此模式的活動。這種模式下活動的特點是:只要創(chuàng)建一個活動實例,一旦激活該活動,就會將新創(chuàng)建的實例添加到任務(wù)棧中,當(dāng)退出該活動時,就會銷毀任務(wù)棧中的實例。
2. Singletop mode
此模式將考慮要激活的活動實例是否位于任務(wù)堆棧的頂部。如果它位于堆棧的頂部,則不需要重新創(chuàng)建新實例,并且將重用現(xiàn)有實例,否則將在任務(wù)堆棧中創(chuàng)建新實例。
3. Singletask mode
如果任務(wù)堆棧中存在該模式的活動實例,則刪除堆棧中實例上方的所有活動實例,調(diào)用實例的newinstance()方法重用該活動,使實例位于堆棧頂部,否則將創(chuàng)建一個新的活動實例。
4. Singleinstance mode
在任務(wù)堆棧中創(chuàng)建此模式的活動實例時,只要該實例仍在任務(wù)堆棧中,即只要該類型的活動被激活,則通過調(diào)用該實例的newinstance()方法,該活動將被重用。此時,將使用相同的活動實例,它將位于任務(wù)堆棧的頂部。此模式通常用于加載速度慢、性能消耗大的活動,這些活動不需要每次都重新創(chuàng)建。
singleTop和singleTask有什么區(qū)別呢?
singleTop singleTop與standard的唯一區(qū)別是,當(dāng)singleTop的活動位于堆棧頂部時,啟動另一個活動不會創(chuàng)建新活動,而是會重用它。例如,a是標(biāo)準(zhǔn)的,B是singletop,/ABAB是任務(wù)堆棧,start:a表示啟動活動,初始堆棧是/a/a開始:B/AB開始:B/AB開始:A/ABA開始:A/ABAA開始:B/ABAAB開始:B/ABAAB就這樣。Singletask和singleinstance可以分為另一種啟動模式,這必然導(dǎo)致任務(wù)棧的變化。singletask和singleinstance的區(qū)別在于singleinstance所在的任務(wù)堆棧只能有其活動。設(shè)a為標(biāo)準(zhǔn),B為單任務(wù),C為標(biāo)準(zhǔn)/a開始:B/B開始:C/BC開始:A/BCA開始:B/B上面。
AsyncTask使用在哪些場景?它的缺陷是什么?如何解決?
使用asynctask的場景是執(zhí)行一些耗時的操作,在耗時的操作完成后更新主線程,或者在操作期間更新主線程的UI。缺陷:asynctask維護(hù)一個長度為128的線程池,可以同時執(zhí)行5個工作線程,并且有一個緩沖隊列。當(dāng)線程池中有128個線程且緩沖區(qū)隊列已滿時,如果此時將任務(wù)提交給線程,則會引發(fā)rejectedexecutionexception。解決方案:使用控制線程處理asynctask的調(diào)用,判斷線程池是否已滿。如果已滿,線程將休眠。否則,它將請求asynctask繼續(xù)處理。
singleTop和singleTask有什么區(qū)別?
Singletop要求,如果在創(chuàng)建意圖時在堆棧頂部有要創(chuàng)建的活動實例,則該意圖將被發(fā)送到實例而不是新實例。(請注意,它位于堆棧的頂部。創(chuàng)建一個沒有堆棧頂部的新實例?。?/p>
單任務(wù)模式:當(dāng)意圖到達(dá)并且需要創(chuàng)建單任務(wù)模式的活動時,系統(tǒng)將檢查堆棧中是否有該活動的實例。如果有的話,直接把意圖發(fā)給它。