2015-04-24 60 views
4

檢查一些舊的代碼我發現這個片段:完成後可以恢復Android活動嗎?

@Override 
public void onResume() { 
    if (!isFinishing()) { 
     ... 
    } 
    super.onResume(); 
} 

儘管在方法,它是氣餒的結束super.onResume()電話:

注意:您實現這些生命週期方法必須隨時撥打 做任何工作前的超類實現,如圖所示 例子上述 http://developer.android.com/guide/components/activities.html

我很擔心if (!isFinishing())調用,這是否有意義?因爲我可以看到檢查活動代碼mFinished變量只在finish()finishActivity()上設置爲true,才能通過Android生命週期恢復正在銷燬的活動?

在此先感謝。

+0

也就是說有趣沒用。你從哪裏找到這些代碼? – shkschneider

+0

是我公司應用的主要活動。 –

+0

onDestroy():在您的活動被銷燬之前接收到的最終呼叫。這可能是因爲活動正在完成(某人稱爲finish(),或者系統暫時銷燬該活動的實例以節省空間,您可以使用isFinishing()方法區分這兩種情況。 //developer.android.com/reference/android/app/Activity.html – shkschneider

回答

1

最後,遺留代碼是在onCreate()方法調用在某些circunstances finish()。但在onCreate()javadoc考慮看看:

你可以從這個函數中調用finish(),在這種情況下 的onDestroy()會立即調用時沒有任何 活動週期的其餘部分(在onStart() ,onResume(),onPause()等)執行。

所以,這isFinishing()電話裏面onResume()

1

對您的問題的回答是「否」活動如果被破壞無法恢復。
這裏是很好的討論: Understanding of isFinishing()

的原因代碼可能是定向 變化和活動重要的實際整理區分這裏要注意 是isFinishing:真,這意味着在調用isFinishing()在 的onDestroy()返回true,即其發生在:

用戶點擊「返回」按鈕或活動的代碼調用它的finish()isFinishing()返回false時,活動歌廳0後關閉爲了電話rotaion再次啓動)

http://ogrelab.ikratko.com/activity-lifecycle-explained-in-details/

+0

我明白你的觀點,以及在onDestroy中使用isFinishing()的原因,但對onResume()我仍然沒有任何意義() –

+0

沒有理由在onDestroy中使用isFinishing(),因爲onDestroy可能根本不會被調用。 – Radoslav

+0

這不是我們在這裏討論的 –