2016-08-06 6 views
0

私はさまざまなデバイスの統計情報を監視するアプリケーションを開発中です。基本的には、毎秒統計情報を更新してユーザーに表示したいと考えています。例えば、単純なバッテリモニタrun()を呼び出して、ユーザーがアプリを閉じるまで画面情報を無限に更新する

public class MainActivity extends AppCompatActivity implements Runnable{ 

public void run(){ 
    fillField(R.id.fieldVoltage, battery.getVolt()); 
} 

@Override 
protected void onResume(){ 
    super.onResume(); 
    run(); 
} 

このコードは正常に動作しますが、私は実際のさわやか

@Override 
protected void onResume(){ 
    super.onResume(); 
    while(true){ 
     run(); 
     try { 
      Thread.sleep(1000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

を追加する場合、私はlogcatをスッキリ見ることができますが、画面はすべてのボタンやテキストを含む空です。私はonResume関数が実際に終了しないので、そのと思う。

リフレッシングを実装するためにどのようなロジックを使用する必要がありますか?

答えて

1

実際にはonResume()が返されないためです。

  • while(true)
  • Thread.sleep(1000)

どちらも、いつでも行うべきではありません:あなたの問題には2つの理由があります。あなたの場合、これらはあなたのメインスレッドをブロックします。

メインスレッドHandlerを使用して、Runnableの遅延をスケジュールします。

public class MainActivity extends AppCompatActivity implements Runnable { 
    private final Handler handler = new Handler(); 

    @Override 
    protected void onResume(){ 
     super.onResume(); 
     run(); 
    } 

    @Override 
    protected void onPause(){ 
     handler.removeCallbacks(this); 
     super.onPause(); 
    } 

    public void run(){ 
     fillField(R.id.fieldVoltage, battery.getVolt()); 
     handler.postDelayed(this, 1000); 
    } 

    [....] 
} 
関連する問題