2010-11-19 19 views
2

İplikleri güvenli bir şekilde nasıl durdurabilirim?Android'de işitme güvenli bir şekilde nasıl durdurulur?

downloadThread = new Thread(new Runnable() { 

    @Override 
    public void run() { 

    }); 
    downloadThread.start(); 
} 
+0

... – dalle

+1

Bu böyle sık iyi cevaplarla sık soru: ([Nasıl Java hızlı ve temiz bir şekilde bir iş parçacığı iptal etmek] http: // stackoverflow. com/questions/94011/nasıl yapılır-iptal-a-thread-in-a-hızlı-ve-temiz-in-java) –

cevap

0

En kolay olanı ayarlanıyor gibi görünüyor.

+0

Bunun için değil, genel bir çözüme ihtiyacım var. – Srinivas

+0

Benzer çözümler, birden çok kez çalıştığım bir yoldur. while (do_run()) {do stuff} – dutt

3

Android sdk'in AsyncTask'u kullanacaksanız, arka plan işlerini yapmak için normal iş parçacığı kullanmak yerine, orada cancel() bulabilirsiniz.

+26

Bu soruya cevap vermiyor. – Trevor

3

Konuyu kesme. İş parçacığının run() yönteminde, farklı mantıksal blokların sonunda isInterrupted() değerini kontrol edin. Örneğin, run() yönteminizin üç mantıksal adımda bölünebildiğini söyleyin - ağ bağlantısı oluşturma, görüntü indirme ve görüntüyü bir dosyaya kaydetme. Bu adımların her birinin sonunda, isCancelled() için kontrol edin ve bu noktada tüm durumu atmayı durdurun.

bile derleme değil
class NetworkFetcherTask extends AsyncTask<String, Void, Void>{ 
    public void doInBackground(String... params){ 
     String url = params[0]; 

     //Open connection if not cancelled 
     if(isCancelled()){ 
      conn.close(); 
      return; 
     } 
     NetworkConnection conn = new NetworkConnection(); 


     //Download the image if not cancelled 
     if(isCancelled()){ 
      conn.close(); 
      result.discard(); 
      return; 
     } 
     NetworkResult result = conn.fetchUrl(url); 
     conn.close(); 

     //Save the image to a file if not cancelled 
     if(isCancelled()){ 
      result.discard(); 
      return; 
     } 
     File file = new File(); 
     file.dump(result); 
    } 
} 
+0

Wohoo! Eski soru! Gerçekleştirilmemiş –

+0

Bir örnek verebilir misiniz, ne teklif edeceğinize nasıl karar verirsiniz? –

+0

İşte gidiyorsun. Ve lütfen isInterrupted() isCancelled() seçeneğine dikkat edin. isInterrupted(), bir AsyncTask değil bir Thread'deki bir yöntemdir. Özür dilerim. –

İlgili konular