2016-08-13 7 views
1

私はです。TextViewはバックグラウンドスレッドから定期的に更新されています。android java異なるスレッドから同時にテキストビューを読み書きします。

myView.getText()でUIスレッド内から読み取ろうとすると、2つの更新の間にその内容を取得する可能性があります。それ以外の場合は、nullとなります。

TextView(または任意のUI要素)にsynchronizedやvolatileのようなものを使用して、同時に2つのスレッドからアクセスできないようにすることはできますか?

EDIT(ソリューション):私は次のクラスを作成@ridsatrioから方向性を次のとおりです。私の頭の上に

import android.widget.TextView; 

public class SyncTextView { 
    TextView syncView; 

    SyncTextView(TextView view) { 
      this.syncView = view; 
    } 

    private synchronized TextView getSyncView() { 
      return syncView; 
    } 

    public CharSequence getText() { 
     return getSyncView.getText(); 
    } 

    public void setText (CharSequence text) { 
     getSyncView.setText(text); 
    } 
} 
+0

私はあなたがそのデコレータに行ったのが好きです。 – ridsatrio

答えて

1

を、あなたはおそらく、あなたの希望Viewにアクセスするための​​メソッドを定義することができます。線に沿って何か:

public void synchronized TextView getTextViewSynchronizedly() { 
    // ..return your view here. 
} 

ますが、これは定義されてしまったら、唯一の他のコンポーネントは、この方法をあなたのTextViewへのアクセスを許可するようにしてください。

0

UIスレッドのtextviewは、postまたはpostOnUiThreadを使用してのみ更新してください。このようにして、コードは読み取り/書き込み呼び出し間で自動的に同期されます。

+0

ここでは同期を使用する必要はありません。 UIスレッドのみの表示を更新するように提案されているので、Android自体によって残りの部分が処理されます。 – Ramit

関連する問題