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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Activity调用栈的分析

發布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Activity调用栈的分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

生活本來就不容易啊,而我們的不努力只會讓生活變得更加無賴。

今天看了*《Android群英傳》*的有關Activity調用棧的相關知識,所以得來寫點東西記錄今天的收獲。

  • 回想當初學習*《第一行代碼》*的時候也看到過這圖,號稱開始那幾年Android面試必問的知識點,所以po上來表示膜拜。下面入正題: Android的調用棧 Android是利用數據結構中的棧來管理Activity的,利用棧是因為它的后進先出(Last In First Out)特性可以在正常情況下良好的管理和決定Activity的狀態。 比如當一個ActivityA啟動另一個ActivityB時,ActivityB處于活動狀態,而ActivityA被壓在棧底,處于停止狀態。當用戶按下Back鍵或者調用finish()方法后,ActivityA重新處于活動狀態進行交互這么一種“和諧”的狀態。但是,并不是所有的Activity都這么“和諧”。所以Google提供了幾種“特權”讓Activity有權力!賦予Activity的權力可以通過AndoridMainifest的android:launchMode屬性或者直接通過Intent兩種方式。

AndroidMainifest啟動模式

  • standard
  • singleTop
  • singleTask
  • singleInstance
  • standard Activity默認的啟動模式,每次創建Activity都會new出一個新的實例。如下圖:
  • singleTop
    • 系統會判斷棧頂Activity是否為所需Activity,是則直接引用,否則新建。(QQ接收信息時,如果在此界面接收到多條信息,直接引用而非new多次實例)
    • 棧頂ActivityA接收請求需啟動ActivityA,則只會調用其onNewIntent()方法。
  • singleTask
    • 這種模式與singleTop類似,但此模式是查找整個Activity棧(同一任務棧)是否存在所需Activity,存在則將其后壓棧的Activity全部銷毀致使目標Activity位于棧頂(可以利用這種模式,用來退出整個應用。將主Activity設置為singleTask模式,在需要退出的Activity跳轉到主Activity,將任務棧清空,利用主Activity中的onNewIntent()方法中調用finish()即退出)。
    • 當處于不同任務棧的Activity被啟動時,將把其整個任務棧引入,當按下back鍵時,需退出這個任務棧所有Activity時才能對原任務棧進行操作(如下圖)。
  • singleInstance
    書上說這種模式,會新建一個任務棧。其原理與瀏覽器的工作原理相類似。多個程序訪問瀏覽器時。如果瀏覽器已開則直接訪問,沒有則打開瀏覽器后訪問。 singleTop與singleInstance還有一點需注意:如果ActivityA中調用startActivityForResult()啟動另外一個時,系統會自動返回Activity.RESULT_CACELED而不會再等待返回。
  • Intent Flag啟動模式

  • Intent.FLAG_ACTIVITY_SINGLE_TOP(singleTop效果相同)
  • Intent.FLAG_ACTIVITY_CLEAR_TOP(singleTask效果相同)
  • Intent.FLAG_ACTIVITY_NO_HISTORY(該模式下,ActivityA啟動ActivityB后,ActivityA小時)
  • 清空任務棧

    • clearTaskOnLaunch(每次返回該Activity時,其Activity上的Activity全部銷毀)
    • finishOnTaskLaunch(離開所在的Activity棧,后返回此Activity被finifh()掉)
    • alwaysRetainTaskState (“免死金牌”,當Activity的此屬性設置為true,不接受任何銷毀命令)

    **總結:**其實網上這些文章有很多而且寫的很透徹,例如老羅的啊,但是自己寫下來感覺會不一樣。

    總結

    以上是生活随笔為你收集整理的Activity调用栈的分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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