日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android Activity的启动模式及对生命周期的影响

發布時間:2025/5/22 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Activity的启动模式及对生命周期的影响 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Activity的啟動模式

官網解釋鏈接
(tips:在閱讀此文章前,應先對Activity生命周期掌握)
在每一個程序的main目錄下有一個AndroidManifest.xml文件,這個文件是用來配置Activity的,在配置Activity時可指定android:launchMode 屬性,該屬性用于配置該Activity的啟動模式(或稱加載模式)。
eg:AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.testapp1"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.TestApp1"><activity android:name=".activity.MainActivity" android:launchMode="singleTop" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".activity.NextActivity" /><activity android:name=".activity.PersonActivity" android:launchMode="singleTop" /></application></manifest>

android:launchMode 屬性支持如下4個屬性值:

  • standard:標準模式,這也是默認的加載模式。
  • singleTop:Task棧頂單列模式。
  • singleTask:Task內單列模式。
  • singleInstance:全局單列模式。

Activity的啟動模式負責管理實例化、啟動Activity的方式,并可以控制Activity與Task之間的加載關系。
Task可以理解為Activity棧,Task以棧的形式來管理Activity,并且先啟動的Activity被放入棧底,后啟動的Activity被置于棧頂。

standard模式以及對Activity生命周期的影響

啟動Activity時,Android都會為目標Activity創建一個新的實例,并添加在當前的Task棧中。特點:一直啟動新的Activity實例并且不會啟動新的Task。
MainActivity部分代碼:

findViewById(R.id.imageButton).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent(view.getContext(), PersonActivity.class);view.getContext().startActivity(intent);}});

PersonActivity部分代碼:

findViewById(R.id.imageView2).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent(view.getContext(), MainActivity.class);view.getContext().startActivity(intent);}});

上面兩段代碼意思是在MainActivity中點擊id為imageButton的按鈕時,啟動PersonActivity;在PersonActivity中點擊id為imageView2的控件時,啟動MainActivity。
在AndroidManifest.xml中設置MainActivity和PersonActivity的啟動模式為standard:

<activity android:name=".activity.MainActivity" android:launchMode="standard" > <activity android:name=".activity.PersonActivity" android:launchMode="standard" />

運行程序,進入MainActivity,點擊按鈕啟動PersonActivity,進入PersonActivity,點擊圖片控件啟動MainActivity,進入MainActivity,再次點擊按鈕啟動PersonActivity觀察其生命周期的變化:
MainActivity實例1:onCreate()->
MainActivity實例1:onStart()->
MainActivity實例1:onResume()->
此時點擊按鈕->
MainActivity實例1:onPause()->
PersonActivity()實例1:onCreate()->
PersonActivity實例1:onStart()->
PersonActivity實例1:onResume()->
MainActivity實例1:onStop()->
此時點擊圖片控件->
PersonActivity實例1:onPause()->
MainActivity實例2:onCreate()->
MainActivity實例2:onStart()->
MainActivity實例2:onResume()->
PersonActivity實例1:onStop()->
此時點擊按鈕->
MainActivity實例2:onPause()->
PersonActivity()實例2:onCreate()->
PersonActivity實例2:onStart()->
PersonActivity實例2:onResume()->
MainActivity實例2:onStop()

上述生命周期加粗處以及圖片標記顏色處發現:在同一個Activity對的實例未銷毀,卻進行的是onCreate()而不是onRestart()。因此,在標準模式下,Activity創建了新的對象加入Task棧頂,原來的實例在Task棧內。(不同Activity實例的hashCode值有差異,但它們所在的TaskID總是相同的,表明標準模式不會使用新的Task)

singleTop模式以及對Activity生命周期的影響

singleTop模式與standard模式類似,不同點在于singleTop模式時,若需啟動的目標Activity已經位于Task棧頂時,系統不會重新創建目標Activity的實例,而是復用已有位于棧頂Activity實例。
其對于Activity生命周期的影響與standard模式不同的時,當動的目標Activity已經位于Task棧頂時,不會onCreate(),而是onRestart()。其他情況與standard模式保持一致,在此不做詳細敘述。

singleTask模式以及對Activity生命周期的影響

采用singleTask這種加載模式的Activity能保證在同一個Task內只有某個Activity的一個實例,當系統采用singleTask 模式啟動目標Activity時,可分為如下三種情況:

  • 如果將要啟動的目標Activity不存在,系統將會創建目標Activity的實例,并將它加入Task棧頂。
  • 如果將要啟動的目標Activity已經位于Task棧頂,此時與singleTop模式的行為相同。
  • 如果將要啟動的目標Activity已經存在、但沒有位于Task棧頂,系統將會把位于該Activity上面的所有Activity移出Task棧,從而使得目標Activity轉入棧頂。
  • 代碼參考standard模式中貼的代碼,其中將MainActivity與PersonActivity的啟動模式設置為android:launchMode=“singleTask”
    觀察在singleTask模式下對Activity生命周期的影響:
    MainActivity:onCreate()->
    MainActivity:onStart()->
    MainActivity:onResume()->
    此時點擊按鈕->
    MainActivity:onPause()->
    PersonActivity():onCreate()->
    PersonActivity:onStart()->
    PersonActivity:onResume()->
    MainActivity:onStop()->
    此時點擊圖片控件->
    PersonActivity:onPause()->
    MainActivity:onRestart()->
    MainActivity:onStart()->
    MainActivity:onResume()->
    PersonActivity:onStop()->

    上述生命周期加粗處以及圖片標記顏色處發現:啟動目標Activity在Task棧中存在時,會直接啟動已存在的Activity的實例復用,并且會銷毀Task棧中在此Activity實例上的Activity實例。

    singleInstance模式以及對Activity生命周期的影響

    在singlelInstance這種啟動(加載)模式下,系統保證無論從哪個Task中啟動目標Activity,只會創建一個目標Activity實例,并會使用一個全新的Task 棧來加載該Activity實例。
    當系統采用 singleInstance模式啟動目標Activity時,可分為如下兩種情況。

    • 如果將要啟動的目標Activity不存在,系統會先創建一個全新的Task,再創建目標Activity的實例,并將它加入新的Task棧頂。
    • 如果將要啟動的目標Activity已經存在,無論它位于哪個應用程序中、位于哪個Task中,系統都會把該Activity所在的Task轉到前臺,從而使該Activity顯示出來。

    需要指出的是,采用singleInstance模式加載Activity總是位于Task 棧頂,且采用singleInstance模式加載的Activity所在Task將只包含該Activity。
    觀察在singleInstance模式下對Activity生命周期的影響:

    從圖中可以看出,singleInstance模式下,啟動MainActivity時,創建了Task,并將MainActivity的實例放入Task棧中(只有一個故位于棧頂);啟動PersonActivity時,創建了新的Task,并將PersonActivity的實例放入新Task中(只有一個故位于棧頂),新Task位于前臺,原Task置于后臺;再啟動MainActivity時,由于其之前已經存在,將其位于的原Task轉入前臺,因在棧頂,直接展示。

    總結

    以上是生活随笔為你收集整理的Android Activity的启动模式及对生命周期的影响的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产成人精品一区二区三 | www.黄色av | 午夜激情在线观看视频 | 亚洲区一区二区 | 国产精品变态另类虐交 | 国产精品12区 | 久色影视 | www.男人的天堂 | 久久久在线免费观看 | 欧美偷拍精品 | 日韩三级av | 中国美女乱淫免费看视频 | 欧美精品三级 | 成年在线观看 | 开心激情网五月天 | 亚洲 欧美 激情 另类 | av全黄| 午夜合集| 亚洲精品第一 | 国产在线第一页 | 日韩精品一区二区三区久久 | 被黑人猛躁10次高潮视频 | 午夜激情影视 | 日韩亚洲欧美一区二区三区 | 少妇无码吹潮 | 精品熟妇视频一区二区三区 | 成人欧美一区二区三区黑人一 | 精品久久久久久久久中文字幕 | 成年网站在线播放 | 亚洲av成人一区二区国产精品 | 在线日韩av| 99爱99| 日本黄在线 | 少妇久久久 | 全部免费毛片在线播放 | 欧美日韩在线第一页 | 国产精品久久久久久久av | 青青青在线观看视频 | 成人精品三级av在线看 | 午夜激情电影在线观看 | 黄色一级图片 | 久久久黄色 | 懂色一区二区二区av免费观看 | 欧美日本日韩 | 欧美成人精品一区二区综合免费 | 99久久99久久免费精品蜜臀 | 日本aa视频 | 在线色 | 一区二区成人在线观看 | 日本女教师电影 | 欧美日韩99 | 激情九月婷婷 | 99re免费视频| 操网站| 成人自拍视频在线观看 | 国产精品综合久久久久久 | 亚洲九九九九 | 欧美性天天 | 天天天天躁天天爱天天碰2018 | 男女激情在线观看 | 日韩欧美99 | 伊人黄| 久久全国免费视频 | 黄免费在线观看 | 日韩美一区二区 | 国内偷拍精品视频 | 蜜臀久久99精品久久久久宅男 | 污污av | 亚洲第一免费 | 久久入口| 久久夫妻视频 | 日韩久久精品电影 | 成av在线| 中文字幕一区二区三 | 四虎com| 少妇久久久久久久久久 | 中文字幕一区二区三区免费看 | 亚洲色图激情小说 | 在线观看a网站 | 白浆在线 | 成人午夜在线观看 | 国产极品91| 超碰成人久久 | youjizzxxxxx| 精品视频在线免费 | 在线免费观看一级片 | 亚洲女优在线 | 亚洲精品国产精品乱码不66 | 特黄一级大片 | 精品在线不卡 | 色狠| 在线中文av | 一品毛片 | 草草影院第一页 | 中文字幕a√ | 国产精品秘入口18禁麻豆免会员 | 午夜剧场成人 | 成人av在线网 | 69社|