我正在编写一个给我带来一些问题的应用程序。我有一个带有按钮的活动 A。当用户按下按钮时,它使用 AsyncTask 类从 Internet 检索数据,当检索到数据时,AsyncTask 类调用在活动 A 中声明的方法,该方法启动新的活动 B。
但这有一个问题,我不知道如何解决。如果用户按下按钮两次(或多次),则两次检索数据并启动两次活动 B。所以,一旦我在活动 B 中,当我按下后退按钮时,活动 B 的实例被破坏但我仍然在活动 B 中(因为它被启动了两次)。
来自 AsyncTask 类的一些下载数据的代码:
@Override
protected String doInBackground(String... urls) {
try {
String data = downloadUrl(urls[0]);
return downloadUrl(urls[0]);
} catch (IOException e) {
return m_errorCODE;
}
}
@Override
protected void onPostExecute(String result) {
((MainActivity) mParentActivity).displayInfo(result);
}
来自 MainActivity 的方法 displayInfo() 启动活动 B:
public void displayInfo(String result) {
int duration = Toast.LENGTH_LONG;
Toast toast = null;
setSupportProgressBarIndeterminateVisibility(false);
if (result == "404 ERROR") {
toast = Toast.makeText(getBaseContext(), R.string.error_file_not_found, duration);
toast.show();
} else if (result == "CONNECTION_ERROR") {
toast = Toast.makeText(getBaseContext(), R.string.error_connection, duration);
toast.show();
} else {
Intent intent = new Intent(this, DisplayInfo.class);
m_data = result;
intent.putExtra(DOWNLOADED_DATA, m_data);
intent.putExtra(FORMAT_OK, Boolean.toString(m_formatOK));
intent.putExtra(URL_FILE, urlFile);
startActivity(intent);
}
}
所以我有三个问题:
- 我怎样才能只下载一次数据?
- 我怎样才能只打开一次活动 B?
- 我怎么知道我的 Activity A 在执行 onPostExecute() 时还活着?
为了解决#2,我尝试在开始活动 B 之前使用 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)。它只打开一个活动 B,但如果我按下回,活动 A 会再次启动活动 B 的另一个实例。
我需要粘贴更多代码吗?提前致谢。