В моем коде я начинаю новое действие для просмотра улиц.
Intent streetView = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(streetView);
Прекрасно запускает вид на улицу. Если я ничего не делаю, я могу нажать кнопку «Назад», и мое приложение сидит там, ожидая, что ничего не изменилось.
Однако, если я немного использую вид улицы, осматриваюсь и перемещаю вид, я вижу это в logcat:
01-27 10: 53: 27.526: INFO / ActivityManager (1079): недостаточно памяти: больше нет фоновых процессов.
01-27 10: 53: 27.636: DEBUG / dalvikvm (32218): GC_FOR_MALLOC освободил 3054 объекта / 198608 байт за 655 мс
01-27 10: 53: 27.831: DEBUG / dalvikvm (32164): GC_FOR_MALLOC освободил 1054 объекта / 51664 байта за 342 мс
01-27 10: 53: 27.862: INFO / dalvikvm-heap (32164): увеличение кучи (случай фрагмента) до 3,665 МБ для выделения 87396 байт
01-27 10: 53: 27.878: INFO / ActivityManager (1079): процесс com.favorite.me (pid 32135) умер.
01-27 10: 53: 27.878: INFO / ActivityManager (1079): недостаточно памяти: больше нет фоновых процессов.
01-27 10: 53: 27.482: INFO / ActivityManager (1079): процесс com.myapp.app (pid 31481) умер.
01-27 10: 53: 27.490: INFO / WindowManager (1079): WIN DEATH: Window {44c68ba8 com.myapp.app/com.myapp.app.MyLocation paused = false}
Затем, когда я нажимаю кнопку «Назад», чтобы вернуться к своему приложению, кажется, что все переменные были сброшены до нуля, как будто я потерял состояние моего приложения. Единственный способ исправить это - снова нажать кнопку «Назад» и снова запустить это действие.
Судя по тому, что я могу сказать, он не вызывает методы onpause () или onSaveInstanceState (), а операционная система убивает мое приложение из памяти для запуска просмотра улиц.
Есть ли что-то, что мне нужно сделать по-другому?
Вот мои методы oncreate, onRestoreInstanceState и onSaveInstanceState:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
sLong = savedInstanceState.getDouble("sLong");
sLat = savedInstanceState.getDouble("sLat");
sMapStyle = savedInstanceState.getBoolean("sMapStyle");
sMapUpdate = savedInstanceState.getBoolean("sMapUpdate");
sMapStreet = savedInstanceState.getBoolean("sMapStreet");
sFirstTime = savedInstanceState.getBoolean("sFirstTime");
locationAvailable = savedInstanceState.getBoolean("locationAvailable");
sGPSFlag = savedInstanceState.getBoolean("sGPSFlag");
sMessage = savedInstanceState.getString("sMessage");
sMap = savedInstanceState.getString("sMap");
sGPS = savedInstanceState.getString("sGPS");
sAddressIn = savedInstanceState.getString("sAddressIn");
sGPSLat = savedInstanceState.getString("sGPSLat");
sGPSLong = savedInstanceState.getString("sGPSLong");
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putDouble("sLong",sLong);
savedInstanceState.putDouble("sLat",sLat);
savedInstanceState.putBoolean("sMapStyle",sMapStyle);
savedInstanceState.putBoolean("sMapUpdate",sMapUpdate);
savedInstanceState.putBoolean("sMapStreet",sMapStreet);
savedInstanceState.putBoolean("sFirstTime",sFirstTime);
savedInstanceState.putBoolean("locationAvailable",locationAvailable);
savedInstanceState.putBoolean("sGPSFlag",sGPSFlag);
savedInstanceState.putString("sMessage",sMessage);
savedInstanceState.putString("sMap",sMap);
savedInstanceState.putString("sGPS",sGPS);
savedInstanceState.putString("sAddressIn",sAddressIn);
savedInstanceState.putString("sGPSLat",sGPSLat);
savedInstanceState.putString("sGPSLong",sGPSLong);
}
Думаю, я могу понять, почему это происходит. Все еще не уверен, как исправить это еще.
Я установил несколько сообщений отладки и вижу, как выполняются методы onRestoreInstanceState()
и onSaveInstanceState()
.
Проблема в том, что мой сохраненный экземпляр не восстанавливается до после завершения моего onCreate()
метода. Но во время метода onCreate()
мне нужны эти переменные, которые на данный момент все еще нулевые. Как я могу заставить свой код работать после onCreate()
, но не требуя ввода данных пользователем? или Как мне заставить onRestoreInstanceState()
запускаться перед моим кодом?