網(wǎng)站首頁 編程語言 正文
狀態(tài)
活動存放在一個叫返回棧的一個集合,當(dāng)重新打開一個Activity時,它就會出現(xiàn)在棧頂。當(dāng)要銷毀該活動時,調(diào)用finish()或back,棧頂?shù)幕顒泳蜁鰲!?/p>
運行狀態(tài):一個活動處于棧頂時
暫停狀態(tài):不處于棧頂,但仍然可見。(失去焦點,非全屏或透明的activity放置在棧頂)
停止?fàn)顟B(tài):不處于棧頂,也不可見,但還是會為它保留一些變量的相關(guān)數(shù)據(jù)。(被覆蓋)
銷毀狀態(tài):在棧中移除(killed狀態(tài))
啟動模式
standard模式:Activity的默認啟動模式。對Activity的啟動和切換沒有任何限制,任何時候我們通過startActivity或startActivityForResult()啟動一個standard模式的activity時,系統(tǒng)都會創(chuàng)建實例并放置到棧頂。【通過intent跳轉(zhuǎn)的時候會創(chuàng)建新的activity實例,重復(fù)創(chuàng)建】
singleTop模式:設(shè)置成該模式時,任務(wù)棧的棧頂不能同時存在兩個Activity的實例。但在整個棧中,可以存在多個實例。防止同一個Activity重復(fù)創(chuàng)建或啟動多次【通過intent跳轉(zhuǎn)的activity在棧頂,直接復(fù)用;若棧頂沒有,重新創(chuàng)建】
singleTask模式:整個任務(wù)棧中只能存在該activity的一個實例。重復(fù)啟動時,系統(tǒng)會銷毀該實例之前的所有其他activity,將該activity移至棧頂。【app在啟動時都會創(chuàng)建一個任務(wù)棧,應(yīng)用內(nèi)被創(chuàng)建的activity都會放進這個棧內(nèi)。只要activity實例被創(chuàng)建過,再次創(chuàng)建時都直接復(fù)用已有實例】
singleInstance模式:該模式下的Activity都將獨立存在一個任務(wù)棧下,并且不能重復(fù)創(chuàng)建或啟動。當(dāng)啟動一個singleInstance模式的Activity時,系統(tǒng)會為應(yīng)用創(chuàng)建一個新的前臺任務(wù)棧,將Activity置于棧內(nèi)。【整個Android系統(tǒng)中實例唯一,可以讓別人的程序直接復(fù)用這個Activity】
其他時候要啟動其他非singleInstance模式的Activity時,系統(tǒng)創(chuàng)建另一個前臺任務(wù)棧,將非singleInstance模式的Activity按照啟動順序置于前臺任務(wù)棧。將singleInstance模式的Activity所在的任務(wù)棧移至后臺。之后啟動任何Activity都是前后臺任務(wù)棧的切換。
重復(fù)啟動同一個singleInstance模式的Activity時,系統(tǒng)將Activity所在的任務(wù)棧切換至前臺,而啟動其他類型Activity,不需要切換任務(wù)棧,添加新實例即可。
操作APP時生命周期調(diào)用
點開Activity,按Home鍵回到主屏:onPause() , onStop()
主屏,再次點擊App回到Activity:onRestart() , onStart() , onResume()
在A Activity上打開 B Activity:A onPause() , B onCreate() , B onStart() , B on Resume() , A onStop()
點擊Back鍵:onPause() , onStop() , onDestroy()
Activity異常生命周期
異常生命周期:Activity被系統(tǒng)回收或當(dāng)前設(shè)備的Configuration發(fā)生變化(橫豎屏),導(dǎo)致Activity被銷毀重建
Configuration發(fā)生變化導(dǎo)致Activity被殺死并重建
onSave【Restore】InstanceState():系統(tǒng)自動調(diào)用,配置發(fā)生變化,Activity被異常銷毀,用于存儲數(shù)據(jù)(時機在onStop之前)。調(diào)用onRestore,把通過onSave保存的Bundle對象作為參數(shù)傳給onRestore和onCreate。正常銷毀,并不會調(diào)用這兩個方法。
onRestore和onCreate的區(qū)別:都可進行數(shù)據(jù)恢復(fù)。但是onRestore一旦被系統(tǒng)回調(diào),其Bundle一定不為空,無需額外的判斷。但onCreate會出現(xiàn)為空的情況,當(dāng)Activity為正常啟動時,Bundle就會為空,需要額外判斷。
使Activity在系統(tǒng)配置發(fā)生變化后不重建:給Activity指定configChange屬性【orientation, screenSize】。orientation對應(yīng)API < 13 , screenSize 對應(yīng)API > 13 。設(shè)置之后,橫豎屏切換時,不會再重建,取而代之是回調(diào)onConfigurationChanged
內(nèi)存不足導(dǎo)致低優(yōu)先級的Activity被殺死 內(nèi)存不足,按照一定優(yōu)先級殺死目標(biāo)Activity的進程來回收內(nèi)存。onSave會被調(diào)用用于存儲數(shù)據(jù),在后續(xù)恢復(fù)會調(diào)用onRestore恢復(fù)數(shù)據(jù)。
總結(jié)
原文鏈接:https://blog.csdn.net/qq_43467051/article/details/122146092
相關(guān)推薦
- 2022-11-10 Android開發(fā)Jetpack組件ViewModel與LiveData使用講解_Android
- 2022-05-15 Python語言實現(xiàn)二分法查找_python
- 2023-02-28 ts之 Mixin混入(ts對象的混入、類的混入)
- 2022-07-19 tomcat升級 遇到的坑 運行tomcat的時候出現(xiàn)NosuchMethodError
- 2022-04-18 css設(shè)置彈性布局讓中間內(nèi)容寬度自適應(yīng)
- 2023-01-10 Vmware虛擬機設(shè)置主機端口映射方式_VMware
- 2022-12-02 React函數(shù)式組件Hook中的useState函數(shù)的詳細解析_React
- 2022-07-28 XML基本概念XPath、XSLT與XQuery函數(shù)介紹_XML/RSS
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支