2017-05-20 38 views
0

這是一個問題我找不到解決方案:Android:「OnStop/OnDestroy」難題

我的應用程序創建一個虛假的位置對象。這需要在用戶每次關閉應用程序時銷燬。如果不是,它會保持完整,直到整個手機重新啓動。現在

,我可以把一個DestroyLocationObject()函數中的OnDestroy()方法中,還沒有 - 在某些情況下的OnDestroy永遠不會被調用。即使用戶完成完成應用程序。

但是,始終調用OnStop。 但問題是,OnStop將被調用,即使用戶不想完全關閉該應用程序,但只是將其放入後臺,然後稍後可能會返回。

我怎麼能絕對確保,當應用程序被關閉我打造的位置對象將被銷燬。不管它是如何關閉的?

+0

當用戶把應用程序放在後臺時,如果你沒有調用finish(),OnPause會被調用。 –

+0

等待..解釋這一點請進一步...我不明白,但它似乎是解決方案! – user8013509

+0

'onStop()'也不保證被調用。 'onPause()'是保證的最後拆解方法。 –

回答

0

是否有可能破壞在的onStop()方法的對象,並創建onRestart一個新的()

+0

謝謝!但不幸的是,該應用程序需要在後臺創建假位置對象 – user8013509

+0

好的,以及onDestroy方法並不保證被調用。你應該檢查https://developer.android.com/reference/android/app/Activity.html#onDestroy%28%29並在onDestroy上閱讀:) – Dragan

+0

@ user8013509你不能依賴後臺存在的活動。如果您需要在後臺執行任何操作,請將其存放在「服務」中。 –

0

通常,要走的路是onStart創建對象並摧毀它onStop

這樣一來,即使他們把應用程序在後臺運行,它是當他們回來重新創建。

你想要做的是,如果Android是內存不足時,系統會破壞您的應用程序,還是要刪除內存中對象的方式的問題。不要以爲他們來的時候,你的對象將是一樣的。

另一個想法,如果你需要同樣的確切位置對象每次,使物體Serializable並保存它,所以你可以檢索它下一次。

+0

謝謝!!!這很有幫助! – user8013509

0

只有在何種情況下onDestroy()不叫是當用戶強制關閉您的應用程序,或者當框架殺死你的應用程序來釋放內存。當這些事情發生時,整個虛擬機就會被銷燬。所以,除非你堅持系統資源(文件,套接字等),否則無需清理。

0

當用戶按下home按鈕時會調用onPause。你應該把你的方法(DestroyLocationObject())放在onPause中。