2010-12-18 10 views
0

Freunde,Wie vermeidet man mehrere asynchrone Thread-Aufrufe?

i folgenden Code bin mit Android Listview zu füllen asynchron

jetzt Problem ist, während dieses Thema läuft i-Taste oder Home-Taste drücken zurück und Aktivität zurück zu kommt

mehr Threads gestartet werden. ...

kann ich vermeiden, diese mehrere Threads eigentlich ich möchte, wenn Thread läuft dann sollte es nicht immer wieder aufgerufen werden. sollte es aufgerufen werden, wenn der vorherige Thread abgeschlossen ist.

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(); 

     } 
    } 
} 

eine sinnvolle Lösung?

danke im voraus.

+0

Sind Sie versuchen, das Hinzufügen von Listenelementen zu animieren? Coz, wenn Sie es sind, gibt es bessere Möglichkeiten, dies zu tun ... – st0le

Antwort

0

können Sie abfangen die Activity Schließung durch onStop() oder onPause() zwingende oder sogar onBackPressed() und das Update beenden, wenn es funktioniert ...

Wenn Sie es nicht möchten, beenden und stattdessen will nur nicht, es wieder zu starten verwenden Sie nur statische Variablen (oder ein anderes Verfahren), so dass die test Variable nur einmal erstellt wird ...

Um ein AsyncTask zu beenden, ich glaube, es gibt eine cancel() Methode ... verwenden true als Parameter.

Von API-Referenz

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