Ответ 1
Первая часть этого ответа действительно старая - см. ниже правильный способ сделать это
Вы можете использовать объект Application для хранения постоянных объектов приложений. Этот Android FAQ также говорит об этой проблеме.
Что-то вроде этого:
public class MyApplication extends Application{
private String thing = null;
public String getThing(){
return thing;
}
public void setThing( String thing ){
this.thing = thing;
}
}
public class MyActivity extends Activity {
private MyApplication app;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = ((MyApplication)getApplication());
String thing = app.getThing();
}
}
Правильный путь:
Когда этот ответ был впервые написан, документация для жизненного цикла Activity была не такой хорошей, как сейчас. Чтение Раздел "Состояние сохранения" в документе "Деятельность" помогает нам понять, как Android хочет, чтобы мы сохранили состояние. По сути, есть два обстоятельства, при которых начинается ваша деятельность: (1) как новое действие и (2) из-за изменения конфигурации или когда он воссоздается после уничтожения из-за давления памяти. Когда ваша активность начинается, потому что это новая активность, тогда saveInstanceState имеет значение NULL. В противном случае это не имеет значения. Если он равен нулю, ваша деятельность должна инициализироваться с нуля. Фрагменты очень похожи на действия, и я подробно рассмотрел эту концепцию для слайд-панели AnDevCon-14. Вы также можете ознакомиться с образцом кода для моей презентации AnDevCon-14 для более подробной информации.
Переработка моего предыдущего примера будет выглядеть примерно так, как показано ниже. Я немного изменяю семантику - в этой второй версии я предполагаю, что строка thing
специфична для действия в рамках конкретной задачи