2016-04-01 13 views
1

Bir düğmenin tıklandığında başlayan Runnable'ı tanımladım, her 1 saniyede bir ImageView görüntüsünü değiştirir. Benim görüşüme göre, kullanıcı bunu tıkladığında tekrar Runnable'ı başlattığım ama bu sefer ImageView görüntüsünü her 2 saniyede bir değiştirdiğimde başka bir düğme var.Android'de bir Runnable'ı birden çok kez kullanın ve bellekte etkisi

Sorum şu: ikinci düğmeyi tıkladığımda, şimdi tek tek iş parçacığı çalıştırmam gerekiyor mu, yoksa yalnızca Runnable'ın ilk örneğini durdurup diğer örneği mi başlatıyorum?

Not: Android'de thread'lar ve Runnable hakkında bazı konular okudum ama yine de farklı bir şey benim için net değil. Ayrıca bu soruyu ve cevapları okudum bana kendi sorumu sormak için duyuyorum. Java - Running a thread twice

Kötü İngilizce için özür dilerim. Benim kod

Runnable kısmı:

Ben, zaman içinde ImageView güncelliyor bir döngü içindeyken bir iş parçacığı oluştururken olduğunu anlamış ne kodunuzdan Yani
private final Runnable mRunnable = new Runnable() { 

    public void run() { 
     if (mIsFlashOn) { 
       if (mSwap) { 
        mImageViewBeam.setVisibility(View.VISIBLE); 
        mSwap = false; 
        mHander.postDelayed(mRunnable, 10000/((mStrobeCounter * 5) + 10)); 
       } else { 
        mImageViewBeam.setVisibility(View.GONE); 
        mSwap = true; 
        mHander.postDelayed(mRunnable, 10000/((mStrobeCounter * 5) + 10)); 
       } 
     } 
    } 
}; 
+0

kod parçası paylaşın başlamak daha katedilebilen ilk kaldırmak için mHandler.removeCallbacks(mRunnable); bu hat kullanın ve gerek. ImageView'ı, Runnable iş parçacığı –

+0

@ReazMurshed Kodundan – MehrdadSComputer

cevap

0

. Doğru bir şekilde anladım, o zaman bunu yapmak gerçekten kötü bir uygulama. Yanlış olabilirim. Lütfen bu durumda güncelleme kodunuzu gönderin. ImageView nasıl güncelleniyor?

Eğer haklıysam, amacınıza hizmet edecek CountDownTimer'u kullanmayı umuyorum. Düğme tıklandığında intervalInMilis değerini ayarlayın. Sonra zamanlayıcıyı iptal etmek için mCountDownTimer.cancel() ve hemen tekrar başlatmak için mCountDownTimer.start().

+0

ekledikten sonra yanıtladığınız için teşekkürler. Döngüde bir iş parçacığı oluşturmuyorum, sadece ilk ve ikinci düğmeler tıklandığında bu kod satırını çalıştırıyorum. mHandler.post (mRunnable); – MehrdadSComputer

1

ben başka

+0

Siz çözüm bir çekicilik gibi çalıştı, teşekkürler. Ama ne olduğundan emin olmak istiyorum. removeCallbacks sırayı kaldırır ve önceki Runnable artık belleği boşa harcamaz? – MehrdadSComputer

İlgili konular