2016-04-01 11 views
1

ボタンをクリックした後に起動するRunnableを定義しました。 ImageViewの画像を1秒ごとに変更します。 私のビューに他のボタンがあります。ユーザーがそのボタンをクリックすると、再びRunnableを起動しますが、今回は2秒ごとにImageViewのイメージを変更します。アンドロイドでRunnableを複数回使用し、メモリに与える影響

私は2番目のボタンをクリックすると、個々のスレッドを実行する必要がありますか、それともRunnableの最初のインスタンスを停止してもう1つのインスタンスを開始するだけですか?

注:スレッドとRunnableに関するいくつかのトピックをアンドロイドで読んでいますが、まだまだ違いはわかりません。 また、この質問を読んで、それは私自身の質問を聞いて聞いてください。

申し訳ありません。

私のコードの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

は、コードの一部を共有してください始めるよりも、実行可能な最初のを削除するにはmHandler.removeCallbacks(mRunnable);このラインを使用し、する必要があると思います。どのようにRunnableスレッドからImageViewを更新していますか? –

+0

@ReazMurshed Code – MehrdadSComputer

答えて

0

だから私は、あなたが時間をかけてImageViewを更新しているwhileループ内のスレッドを作成している理解しているものをあなたのコードから。私が正しく理解していれば、それは本当に悪い習慣です。私は間違っているかもしれません。その場合、更新コードを投稿してください。 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ループでスレッドを作成していません、最初と2番目のボタンがクリックされたときにこのコード行を実行します。 mHandler.post(mRunnable); – MehrdadSComputer

1

は、私はあなたが別の

+0

あなたのソリューションは、魅力のように働いた、ありがとう。しかし、私は何が起きているのか確かめたい。 removeCallbacksはキューを削除するので、以前のRunnableはメモリを無駄にしません。 – MehrdadSComputer

関連する問題