2017-04-27 51 views
1

我們使用CLEAR_TOP和NEW_TASK標誌顯示某些觀點檢測中,破壞是因爲CLEAR_TOP&NEW_TASK

例如在具有ViewA,ViewB,ViewC應用時收拾在Android上回堆棧的Android活動和ViewD,我們總是使用CLEAR_TOP和NEW_TASK加載ViewC。

  1. ViewA(根)
  2. ViewB
  3. ViewC
  4. ViewD

從ViewD顯示ViewC的返回堆棧的情況下,將導致ViewD被破壞。 ViewD是否知道它已經因爲CLEAR_TOP而被銷燬,而不僅僅是因爲用戶已經離開View?

+0

爲什麼不使用viewT的singleTask。它清除viewC上方的活動。如果您的堆棧中已經有viewC並再次啓動,則viewD將被銷燬,viewC的onNewIntent()方法將被調用。我知道這不是回答你的問題,但我只是說:)當我們來到你的問題,我不認爲任何其他方法被稱爲除了從活動堆棧清除onDestroy。因此,您可以在啓動viewC之前和viewC的onNewIntent()方法調用之後檢查堆棧。 – mertsimsek

+0

「所以你可以檢查你的堆棧」是否建議我可以查看堆棧中的項目,在加載新的ViewC之前找到當前的ViewD並告訴它「你即將被刪除」?如果我能做到這一點會很好,但我認爲不可能 –

+0

實際上,您可以通過獲取活動列表來實現。 'getPackageManager()。getPackageInfo(「your.package」,PackageManager.GET_ACTIVITIES).activities'會給你ActivityInfo數組。所以你可以通過調用'activityArray [0] .name'來訪問活動名稱。 – mertsimsek

回答

0

除非有人想出一個更清潔的解決方案,這是我所做的。

我陷阱OnBackPressed並設置一個布爾說BackKeyPressed。 在OnDestroy中,我檢查是否已經設置了該標誌,如果它沒有,我確定該Activity因爲使用CLEAR_TOP縮短了後退堆棧而被銷燬。

我意識到的OnDestroy和標誌==假的也可能是因爲該應用被關閉,但我在那種情況下服用,而unneccesary行動是安全

可能的OnDestroy中叫什麼其他方案?