在活动之间使用SharedPreferences

时间:2012-02-12 09:19:28

标签: android android-preferences

我的应用程序基于DashboardActivity。另一项活动叫做新闻。

在此新闻活动中,我使用AsyncTask从互联网加载信息。用户可以远离此活动并启动其他活动,我希望在应用程序生命周期内仅一次下载信息。

也就是说,我想要的是:

  • 用户启动应用,转到新闻,信息下载。
  • App会记住该信息已下载,因此如果再次启动新闻,则不会下载该信息。
  • 当应用程序停止时(让我们说用户按下主要活动的按钮),应用程序必须“忘记”"信息已下载。因此,下次启动应用程序时,必须在启动新闻时再次下载信息。

我想过使用SharedPreferences做这件事。

以下是新闻中的内容:

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>>
}

在AsyncTask的doInBackground中:

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

在AsyncTask的onPostExecute中(如果仅下载了信息):

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

这里是DashboardActivity的onStop方法:

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。


更新

这是DashboardActivity的明显部分:

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

似乎每次按下后退按钮都会调用onStop()(和onDestroy()) - 无论&#34;&#34;多远?我从事不同的活动。

1 个答案:

答案 0 :(得分:0)

也许您应该使用静态布尔值,默认情况下为false。一旦启动应用程序,您将值设置为true。这就是为什么你可以确保当你在你的应用程序时,新闻只下载一次。静态值贯穿整个运行时。在onRestart()或onResume();)

上再次将值设置为false