我的应用程序基于DashboardActivity。另一项活动叫做新闻。
在此新闻活动中,我使用AsyncTask从互联网加载信息。用户可以远离此活动并启动其他活动,我希望在应用程序生命周期内仅一次下载信息。
也就是说,我想要的是:
我想过使用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;多远?我从事不同的活动。
答案 0 :(得分:0)
也许您应该使用静态布尔值,默认情况下为false。一旦启动应用程序,您将值设置为true。这就是为什么你可以确保当你在你的应用程序时,新闻只下载一次。静态值贯穿整个运行时。在onRestart()或onResume();)
上再次将值设置为false