[英]Is the Activity instance really destroyed after onDestroy() method is called?
我在學習savedInstanceState Bundle時感到困惑。 我發現,在調用onDestroy()方法之后,Activity實例不會被破壞,或者它可以在不保存saveInstanceState Bundle的情況下保存數據。
這是我的測試代碼:
package com.example.hellotest;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
private static int testNum = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
setContentView(R.layout.activity_main);
testNum++;
Log.d(TAG, "testNum: " + testNum);
if(savedInstanceState == null)
Log.d(TAG, "savedInstanceState is null");
else
Log.d(TAG, "savedInstanceState is NOT null");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
}
這是日志信息:
11-17 22:10:14.433: D/MainActivity(23303): onCreate
11-17 22:10:14.463: D/MainActivity(23303): testNum: 1
11-17 22:10:14.463: D/MainActivity(23303): savedInstanceState is null
11-17 22:10:17.527: D/MainActivity(23303): onDestroy
11-17 22:10:18.278: D/MainActivity(23303): onCreate
11-17 22:10:18.298: D/MainActivity(23303): testNum: 2
11-17 22:10:18.298: D/MainActivity(23303): savedInstanceState is null
11-17 22:10:19.569: D/MainActivity(23303): onDestroy
11-17 22:10:20.200: D/MainActivity(23303): onCreate
11-17 22:10:20.220: D/MainActivity(23303): testNum: 3
11-17 22:10:20.220: D/MainActivity(23303): savedInstanceState is null
除非我完全殺死電話上的進程,否則testNum永遠不會返回1,在我看來,Activity實例並未真正銷毀,因此我們無需重寫onSaveInstanceState(Bundle outState)方法即可保存數據。
我有誤會的地方嗎?
testNum
聲明為static
,因此與類MainActivity
關聯,而不是它的任何特定實例。 除非需要靜態訪問testNum
,否則應刪除static
標識符:
private int testNum = 0;
這樣做將導致testNum
與MainActivity
類的實例相關聯,並且確實會被銷毀。
如果選擇,可以覆蓋onSaveInstanceState
以在輪換中維護實例變量,或者如果MainActivity
被銷毀並為其他任何配置更改而重新創建:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("testNum", testNum);
}
靜態變量和實例變量之間存在混淆。
您的計數器是靜態的,因此它具有進程的生命周期,而不是任何特定的實例。
由於不能保證進程的生命周期,因此通常您不希望在此存儲任何無法重新創建的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.