我考慮看看這個例子 https://developer.android.com/training/location/retrieve-current.html#CheckServicesGoogle Play服務錯誤對話框潛在的內存泄漏?
這裏是有問題的代碼:
public class MainActivity extends FragmentActivity {
...
private boolean servicesConnected() {
...
if (ConnectionResult.SUCCESS == resultCode) {
...
// Google Play services was not available for some reason.
// resultCode holds the error code.
} else {
// Get the error dialog from Google Play services
Dialog errorDialog = GooglePlayServicesUtil.getErrorDialog(
resultCode,
this,
CONNECTION_FAILURE_RESOLUTION_REQUEST);
...
}
}
}
如果我們GooglePlayServicesUtil.getErrorDialog(..)
看一看我們傳遞給this
參考這恰好是一個Activity
。
現在的問題是: 這會導致配置更改期間內存泄漏嗎?
我想答案取決於如何/如果GooglePlayServicesUtil.getErrorDialog(..)
保持在內部參考Activity
。
這解決了內存泄漏,但它是一個不好的用戶體驗。通過更改配置來更改屏幕上的內容是一種糟糕的用戶體驗。 – 2014-10-10 06:11:13
如果對話框看起來沒有像配置更改之前那樣完全一樣,那就太差了。這是onResume進來的地方。在這個例子中,它很好,因爲GPS對話框會再次出現。對於其他對話框,如果顯示對話框,則只需設置布爾值,然後再通過恢復並通過用戶在對話框中更改的onSavedInstanceState恢復變量來顯示它。這就是爲什麼我更喜歡在自己的私有方法中使用對話框代碼使事情變得更容易和有組織 – user3364963 2014-10-10 13:17:21