2016-03-26 5 views
-1

Hizmetimde aşağıdaki kod var ve bayrak true değerine ayarlandığında döngüyü kırmak istiyorum. İnternet bağlantısı yavaş ya da zayıf olduğunda iyi çalışır. Sonra indirme kısmına yapıştığında, döngü verimli bir şekilde kırılmaz. Herhangi bir geçici çözüm var mı? Bir çözüm, periyodik olarak (her 500 ms'de bir) bayrak durumunu kontrol eden bir zamanlayıcı kullanıyor. Ancak, bayrak true olarak ayarlandığında döngüyü nasıl kırılacağını bilmiyorum!Döngü nasıl kırılır?

static boolean flag = false; 

public int onStartCommand(Intent intent, int flags, int startId) {    
    new Thread (new Runnable(){ 
     @Override 
     public void run() { 
      foo(); 
     } 
    }).start();  
    return START_STICKY; 
} 

void foo(){  
    try{    
     while(true){ 
      if (flag) 
       return; 
      //download some data which takes a few seconds 
     } 
    } catch (Exception e){ 
    } 
} 
+1

Sen bayrak gibi uçucu hale deneyebilirsiniz: uçucu statik boolean bayrak = false; Her zaman onun değeri hafızadan okunacaktır. –

cevap

0

Döngüden çıkmak için break; anahtar sözcüğünü kullanın. sizin için sizin döngü içinde böyle bir şey görünebilir Yani:

if(condition) { 
    break; 
} 
+0

Bu bir mola veya geri dönüş meselesi değil. İndirme işleminde sıkışmışken çıkmam lazım. Bir yolu var mı? – solo

+0

@Charanor, Soruya yazılan kodu yalnız görüyorsanız, zaten bir döngü yerine dönüşü olan bir 'dönüş' ifadesi vardır. –

+0

Sorunuma göre "takılıyorum" demekle çok fazla zaman harcıyorsunuz - o zaman indirme işleminin ne kadar sürdüğünü kontrol etmenizi öneririm ve eğer yukardaysa, 1 saniye söyleyeyim ya ´return; ´ veya ´ kodu kırmak. – Charanor