Использование SharedPreferences между действиями - PullRequest
0 голосов
/ 12 февраля 2012

Мое приложение основано на DashboardActivity.Другое действие называется News.

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

То есть то, что я хочу, это:

  • Пользователь запускает приложение, переходит в Новости, информация загружается.
  • Приложение запоминает, что информация была загружена, поэтому, если Новости запускаются снова, информация не будет загружена.
  • Когда приложение остановлено (скажем, пользователь нажимает кнопку «Назад» из основного действия), приложение должно «забыть», что информация была загружена.Поэтому в следующий раз, когда приложение будет запущено, информация должна быть снова загружена при запуске News.

Я думал об этом с помощью SharedPreferences.

Вот как это выглядит в News:

int news_loaded = 0;
public static final String PREFS_NAME = "MyPrefsFile";
static SharedPreferences preferences;
SharedPreferences.Editor editor;

public void onCreate(Bundle savedInstanceState)
{
    ....
    preferences = getSharedPreferences(PREFS_NAME, 0);
    editor = preferences.edit();
    news_loaded = preferences.getInt("news_loaded", 2);

    <<start asynctask here>>
}

В doInBackground AsyncTask:

if(news_loaded == 0)
    <<download info>>

В onPostExecute AsyncTask (если информация была загружена только):

editor.putInt("news_loaded", 1);
editor.commit();

Вот метод onStop DashboardActivity:

public static final String PREFS_NAME = "MyPrefsFile";
static SharedPreferences preferences;
SharedPreferences.Editor editor;

protected void onStop()
{
    preferences = getSharedPreferences(PREFS_NAME, 0);
    editor = preferences.edit();
    editor.putInt("news_loaded", 0);
    editor.commit();
    super.onStop();
}

Проблема: news_loaded всегда кажется равным 0, когда я запускаю операцию новостей.


Update

Это часть манифеста DashboardActivity:

    <activity
        android:name=".DashboardActivity"
        android:launchMode="singleInstance"
        android:configChanges="keyboardHidden|orientation"/>

Кажется, что onStop()onDestroy()) вызываются каждый раз, когда я нажимаю кнопку "назад" - неважно "как далеко в«Я занимаюсь разными видами деятельности.

1 Ответ

0 голосов
/ 12 февраля 2012

Возможно, вам следует использовать статическое логическое значение, которое по умолчанию имеет значение false.Как только вы запустите приложение, вы установите значение true.Таким образом, вы можете быть уверены, что пока вы находитесь в приложении, новости загружаются только один раз.Статические значения «живут» в течение всего времени выполнения.Установите значение false снова в onRestart () или onResume ();)

...