朋友,
我正在使用以下代码异步填充android listview
现在问题是在运行此线程时我按下后退按钮或主页按钮并返回活动
启动多个线程....
我可以避免这些多线程吗? 实际上我想要如果线程正在运行那么它不应该被反复调用。 它应该在前一个线程完成时调用。
private static String[] items={.......};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setListAdapter(
new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
new ArrayList()));
AddStringTask test= new AddStringTask();
test.execute();
}
class AddStringTask extends AsyncTask<Void, String, Void> {
@Override
protected Void doInBackground(Void... unused) {
for (String item : items) {
publishProgress(item);
SystemClock.sleep(1000);
}
return(null);
}
@Override
protected void onProgressUpdate(String... item) {
((ArrayAdapter)getListAdapter()).add(item[0]);
}
@Override
protected void onPostExecute(Void unused) {
Toast
.makeText(AsyncThread.this,
"Done - Finished updating Java Book List!",
Toast.LENGTH_SHORT)
.show();
}
}
}
任何有用的解决方案?
提前谢谢。答案 0 :(得分:0)
您可以通过覆盖Activity
或onStop()
甚至onPause()
拦截onBackPressed()
结算,并在更新时终止更新...
如果您不希望终止它而只是不想再次启动它,只需使用静态变量(或任何其他方法),这样test
变量只创建一次......
要终止AsyncTask
,我相信有一个cancel()
方法...使用true
作为参数。
来自API参考
final boolean cancel(boolean mayInterruptIfRunning)
//Attempts to cancel execution of this task.