Статические переменные не могут быть сохранены в onSaveInstanceState? - PullRequest
1 голос
/ 15 апреля 2010

Рассмотрим следующий код, он сохраняет статическую переменную: mMyArray в onSaveInstanceState и восстанавливает его в onRestoreInstanceState, однако я обнаружил, что он вообще не может сохранить массив int. Я пробовал значение примитивного типа (int), он может сохранить / восстановить значение примитивного типа.

public class StaticVarActivity extends Activity {

    private static final String TAG = "StaticVarActivity";

    private static int[] mMyArray = { 1, 1 };

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Log.d(TAG, "Setting values to 2 in onCreate");
        mMyArray[0] = 2;
        mMyArray[1] = 2;

        findViewById(R.id.btn).setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                Log.d(TAG, "Setting values to 3 in onClick");
                mMyArray[0] = 3;
                mMyArray[1] = 3;
            }
        });
    }

    /* (non-Javadoc)
     * @see android.app.Activity#onRestoreInstanceState(android.os.Bundle)
     */
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);

        Log.d(TAG,"onRestoreInstanceState 1:"+mMyArray[0]+","+mMyArray[1]);
        mMyArray = savedInstanceState.getIntArray("key");
        Log.d(TAG,"onRestoreInstanceState 2:"+mMyArray[0]+","+mMyArray[1]);

    }

    /* (non-Javadoc)
     * @see android.app.Activity#onSaveInstanceState(android.os.Bundle)
     */
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.d(TAG,"onSaveInstanceState 1:"+mMyArray[0]+","+mMyArray[1]);
        //int[] sss = new int[]{mMyArray[0],mMyArray[1]};
        //outState.putIntArray("key", sss);
        outState.putIntArray("key", mMyArray);
        Log.d(TAG,"onSaveInstanceState 2:"+mMyArray[0]+","+mMyArray[1]);
    }
}

Лог:


04-14 15: 16: 00.633: DEBUG / StaticVarActivity (7251): установка значений 2 в onCreate 04-14 15: 16: 19.843: DEBUG / StaticVarActivity (7251): установка значений 3 в onClick

// Выполнить изменение конфигурации, например, изменить ориентацию

04-14 15: 16: 23.893: DEBUG / StaticVarActivity (7251): onSaveInstanceState 1: 3,3 04-14 15: 16: 23.893: DEBUG / StaticVarActivity (7251): onSaveInstanceState 2: 3,3 04-14 15: 16: 24.073: DEBUG / StaticVarActivity (7251): установка значений 2 в onCreate 04-14 15: 16: 24.073: DEBUG / StaticVarActivity (7251): onRestoreInstanceState 1: 2,2 04-14 15: 16: 24.073: DEBUG / StaticVarActivity (7251): onRestoreInstanceState 2: 2,2


Если я поменяю на:

private int[] mMyArray = { 1, 1 };

Журнал будет:


04-14 15: 18: 29.183: DEBUG / StaticVarActivity (7355): установка значений 2 в onCreate 04-14 15: 18: 32.123: DEBUG / StaticVarActivity (7355): установка значений 3 в onClick

// Выполнить изменение конфигурации, например, изменить ориентацию

04-14 15: 18: 33.353: DEBUG / StaticVarActivity (7355): onSaveInstanceState 1: 3,3 04-14 15: 18: 33.353: DEBUG / StaticVarActivity (7355): onSaveInstanceState 2: 3,3 04-14 15: 18: 33.373: DEBUG / StaticVarActivity (7355): установка значений 2 в onCreate 04-14 15: 18: 33.393: DEBUG / StaticVarActivity (7355): onRestoreInstanceState 1: 2,2 04-14 15: 18: 33.393: DEBUG / StaticVarActivity (7355): onRestoreInstanceState 2: 3,3


Я узнал, что не нужно сохранять статическую переменную, но почему это происходит?

1 Ответ

1 голос
/ 15 апреля 2010

AFAIK, вы не можете заменить static int[] другим int[]. Вы можете заменить элементы static int[] другими значениями int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...