Android 多次启动的活动
我正在编写一个给我带来一些问题的应用程序。我有一个带按钮的活动A。当用户按下按钮时,它使用AsyncTask类从Internet检索数据,当检索到数据时,AsyncTask类调用活动a中声明的方法,该方法启动新的活动B 但这有一个问题,我不知道如何解决。如果用户按下按钮两次(或不止一次),将检索两次数据并启动两次活动B。所以,一旦我在活动B中,当我按下后退按钮时,活动B的实例被销毁,但我仍然在活动B中(因为它被启动了两次) AsyncTask类中下载数据的一些代码:Android 多次启动的活动,android,android-asynctask,android-activity,Android,Android Asynctask,Android Activity,我正在编写一个给我带来一些问题的应用程序。我有一个带按钮的活动A。当用户按下按钮时,它使用AsyncTask类从Internet检索数据,当检索到数据时,AsyncTask类调用活动a中声明的方法,该方法启动新的活动B 但这有一个问题,我不知道如何解决。如果用户按下按钮两次(或不止一次),将检索两次数据并启动两次活动B。所以,一旦我在活动B中,当我按下后退按钮时,活动B的实例被销毁,但我仍然在活动B中(因为它被启动了两次) AsyncTask类中下载数据的一些代码: @Override prot
@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);
}
启动活动B的MainActivity中的displayInfo()方法:
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);
}
}
所以我有三个问题:
对于#3,您可以测试mParentActivity是否为null?不过我不确定。AsychTasks是一种只执行一次的线程 我会用这个类来代替。网上有很多例子说明了如何将它与AsyncTask结合使用。。这太容易了。。。我使用了一个变量来检查AsyncTask是否已经在运行,以解决#1和#2。而且#3只需要检查mParentActivity是否不为null。或者,您可以做的一件事是调用
按钮。在onClick
方法的末尾调用按钮,然后在异步任务的postExecute()
方法上调用按钮。setClickable(true)
。但不确定这是否是一个好的做法。