Постоянное состояние Android с глобальными переменными, когда система убивает действия - PullRequest
2 голосов
/ 22 января 2010

Чтобы сохранить состояние в моем приложении для Android, чтобы пользователь мог вернуться к активности, на которой он остановился, я установил очень полезный флаг AlwaysRetainTaskState в моем манифесте:

<activity android:name=".Main"
              android:label="@string/app_name"
              android:alwaysRetainTaskState="true"> 
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Это делает работу, или я так думал; Я обнаружил, что система все еще может разрушать действия моего приложения, чтобы сохранить память, сохраняя при этом состояние. Чтобы проверить это, я написал небольшое тестовое приложение, которое создает целый цикл действий в цикле, чтобы увидеть, будут ли действия моего приложения уничтожены. Конечно же, система разрушает мою деятельность.

При чтении я обнаружил, что мне нужно использовать onSaveInstanceState () и onRestoreInstanceState (), чтобы помочь поддерживать состояние активности.

Чтобы перейти к моему вопросу, скажем, у меня есть Activity с несколькими глобальными переменными, некоторые из них являются статическими, а некоторые нет. Они состоят из логических значений, массивов, строк и т. Д. Моя проблема в том, что я не понимаю, какие из этих переменных являются постоянными при уничтожении активности. Какие из них я должен упаковать в пакет в onSaveInstanceState ()? Делает ли система что-нибудь с этими переменными, когда действие уничтожается?

1 Ответ

5 голосов
/ 22 января 2010

скажем, у меня есть активность с число глобальных переменных, некоторые из они статичны, а некоторые нет.

В Java не существует такой вещи, как "глобальная переменная". Также по возможности следует избегать использования не окончательных (то есть изменяемых) статических элементов данных.

Какие из них я должен упаковать в включить в onSaveInstanceState ()?

На это невозможно ответить абстрактно.

Система что-нибудь делает с этими переменные, когда активность уничтожены?

Возможно. Члены статических данных живут до тех пор, пока идет процесс. Когда ваше последнее действие будет уничтожено, ваш процесс будет прерван в недалеком будущем, и эти статические члены данных будут удалены. При следующем запуске приложения эти элементы статических данных будут повторно инициализированы.

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