簡體   English   中英

android 返回活動時它被破壞並且不恢復

[英]android when returning to activity it is destroyed and not resumed

我正在構建一個 android 應用程序,其中包含兩個使用操作欄的活動(https://github.com/johannilsson/android-actionbar,因為我的目標是 Android 2.2)。

它有許多活動。 有一個名為“Feed”的“主頁”活動和另一個名為“設置”的活動。

我遇到的問題是,使用示例中為我正在使用的操作欄提供的 createIntent function,當用戶點擊主頁按鈕返回到 Feed 活動時,活動仍然被破壞而不是恢復。

通過一些調試,我發現它正在被破壞,不是在第一次暫停和停止 Activity 時,而是在請求它恢復時發生。

public static Intent createIntent(Context context) 
{        
    Intent i = new Intent(context, Feed.class);        
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);        
    return i;    
}

這是一個主要的煩惱,並且大大減慢了應用程序的速度,因為它必須重新加載它的數據以供提要(它被緩存,但它不是立即重新加載數據)。

那么我該如何避免這種行為呢? 以及為什么會發生這種情況,因為我相信那里的額外標志應該阻止這種行為。

你想使用:

FLAG_ACTIVITY_REORDER_TO_FRONT

引用 Android 文檔

如果在傳遞給 Context.startActivity() 的 Intent 中設置,則此標志將導致已啟動的活動被帶到其任務歷史堆棧的前面(如果它已經在運行)。

例如,考慮一個由四個活動組成的任務:A、B、C、D。如果 D 調用 startActivity() 的 Intent 解析為活動 B 的組件,則 B 將被帶到歷史堆棧的前面,結果順序為:A、C、D、B。如果還指定了 FLAG_ACTIVITY_CLEAR_TOP,則此標志將被忽略。

public static Intent createIntent(Context context) 
{        
    Intent i = new Intent(context, Feed.class);        
    i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);        
    return i;    
}

根據哪個 class 正在啟動什么,您可能會遇到一個問題,即您的活動的新實例正在啟動而舊實例正在被銷毀。 這就是文檔所說的FLAG_ACTIVITY_CLEAR_TOP

如果設置,並且正在啟動的活動已經在當前任務中運行,那么不會啟動該活動的新實例,而是關閉它上面的所有其他活動,並且此 Intent 將被傳遞到(現在頂部)作為新意圖的舊活動。

請注意,它說“如果正在啟動的活動已經在當前任務中運行......”所以我不確定,但如果您的調試顯示活動也被破壞,這將是有意義的。

調試時,您是否正在查看 class 對象的“id”數字? 在 class 的onCreate()onDestroy()方法中設置一個斷點,並查看每個方法中 class 的 id。 如果它們不同,那么您知道您有兩個不同的活動實例。

作為旁注/問題,如果ActionBar直到 3.0 才可用,您如何“定位” 2.2?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM