2016-04-01 25 views
1

我定義了一個Runnable,它在點擊按鈕後啓動, 它每1秒更改一次ImageView的圖像。 在我看來還有一個按鈕,當用戶點擊該按鈕時,我又啓動了Runnable,但這次它每2秒更改一次ImageView的圖像等等。在Android中使用Runnable多次,它對內存有影響

我的問題是:當我點擊第二個按鈕時,現在是否必須單獨運行線程,或者它只是停止Runnable的第一個實例並啓動另一個實例?

注意:我讀了一些關於android中的線程和Runnable的話題,但仍然不同,我不清楚。 也讀這個問題,它的答案讓我聽到問我自己的問題。 Java - Running a thread twice

對不起,對英文不好。我的代碼

Runnable接口部分:

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

請分享一段代碼。如何從Runnable線程更新ImageView –

+0

@ReazMurshed代碼添加了 – MehrdadSComputer

回答

0
從你的代碼是什麼有我的理解是,你要創建一個while循環,這是更新 ImageView過的時間內螺紋

左右。如果我理解正確,那麼這是一個非常糟糕的做法。我可能錯了。請在這種情況下發布您的更新代碼。你如何更新ImageView

如果我是對的,請嘗試考慮CountDownTimer這將爲您的目的,我希望。

CountDownTimer mCountDownTimer = new CountDownTimer(howLongYouWantItToRunInMilis, intervalInMilis) { 

    public void onTick(long remainingMilis) { 
     // Update your ImageView here 
     if (mSwap) { 
      mImageViewBeam.setVisibility(View.VISIBLE); 
      mSwap = false; 

     } else { 
      mImageViewBeam.setVisibility(View.GONE); 
      mSwap = true; 
     } 
    } 

    public void onFinish() { 
     // Start the timer again from the code. 
    } 

}.start(); 

單擊按鈕時設置intervalInMilis。然後mCountDownTimer.cancel()取消定時器和mCountDownTimer.start()立即再次啓動它。

+0

感謝您的回答。我沒有在while循環中創建線程,當第一個和第二個按鈕被點擊時,我只是運行這行代碼。 mHandler.post(mRunnable); – MehrdadSComputer

1

我認爲你需要使用mHandler.removeCallbacks(mRunnable);此行刪除第一個可運行的,而且比再掀

+0

你的解決方案像一個魅力工作,謝謝。但我想確定發生了什麼事。 removeCallbacks刪除隊列,因此以前的Runnable不會浪費內存了嗎? – MehrdadSComputer

相關問題