2010-12-18 68 views
0

朋友,如何避免多個異步線程調用?

我使用下面的代碼來填寫的Android的ListView異步

現在的問題是當運行這個線程我按下後退按鈕或home鍵,回來到活動

多個線程啓動。 ...

我可以避免這些多線程 實際上我想如果線程正在運行,那麼它不應該一次又一次地被調用。 當前一個線程完成時應該調用它。

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

你是不是想動畫添加列表項?如果你是真的,有更好的方法來做到這一點... – st0le 2010-12-18 13:40:47

回答

0

您可以通過覆蓋onStop()onPause()甚至onBackPressed()攔截Activity關閉和終止更新時,它...

如果您不希望終止它,而是隻想不要再啓動它,只是使用靜態變量(或任何其他方法),使得test變量僅創建一次......

要終止AsyncTask,我相信有cancel()方法...使用true作爲它的參數。

從API參考

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