如何避免多个异步线程调用?

时间:2010-12-18 13:32:45

标签: android

朋友,

我正在使用以下代码异步填充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();

        }
    }
}

任何有用的解决方案?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以通过覆盖ActivityonStop()甚至onPause()拦截onBackPressed()结算,并在更新时终止更新...

如果您不希望终止它而只是不想再次启动它,只需使用静态变量(或任何其他方法),这样test变量只创建一次......

要终止AsyncTask,我相信有一个cancel()方法...使用true作为参数。

来自API参考

final boolean cancel(boolean mayInterruptIfRunning)
//Attempts to cancel execution of this task.