2012-03-15 17 views
0

1秒に1回TextViewを更新するタスクをスケジュールしようとしています。限り、私はそれの後のコメントと、行を持ってコメントアウト、すべて正常に動作します。 Logcatは次のようにいろいろ書いを示しています2番目のTextView.setText()でスケジュールされた定期的なタスクがフリーズする

Task 
IN 
OUT 
Task 
IN 
OUT 
... 

しかし、私はstatusLabel.setTextを()コメントを外している場合、これは私が見たものである。

Task 
IN 
OUT 
TASK 
IN 

これらの5つの行は、私が得るすべてです。何らかの理由で、もう一度テキストを設定しようとすると、停止するようです。


マイコード:

public class MyActivity extends Activity { 

    TextView statusLabel; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.control); 
     statusLabel = (TextView) findViewById(R.id.statusLabel); 

     ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); 
     scheduler.scheduleAtFixedRate(
       new Runnable() { 
        public void run() { 
         Log.d("Datalogger","Task"); 
         updateStatus(); 
        } 
       }, 0, 1, TimeUnit.SECONDS); 
    } 

    private void updateStatus() { 
     Log.d("Datalogger","IN"); 
     statusLabel.setText("X"); // !! If I comment out this line, 
     Log.d("Datalogger","OUT"); // everything works 
    } 
} 

答えて

2

問題は、UI(メイン)スレッド以外のスレッドからUIを更新しようとしていることです。実行可能ファイルでは、runOnUiThread(Runnableアクション)を使用して、updateStatus()を呼び出す新しい実行可能ファイルを指定します。

1

あなたがバックグラウンドスレッドからUIを更新することはできません。あなたのログにそれについての誤りがあってすらあるはずです。 Use Activity#runOnUiThread(Runnable)

+0

ログには不必要なものが溢れていたので、自分のメッセージ以外のすべてをフィルタリングしました:)私はもう寝るべきだと思います。 – varesa

関連する問題