2016-08-13 107 views
1

我有一個TextView這是從後臺線程定期更新。android java從不同的線程同時讀取/寫入textview

當我嘗試從UI線程內部使用myView.getText()來閱讀它時,在兩次更新之間獲取其內容是偶然的。否則,我只是得到null

是否可以在TextView(或任何UI元素)上使用類似synchronized或volatile的東西來確保它不能同時從兩個線程訪問?

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

請僅使用post或postOnUiThread更新UI線程上的textview。通過這種方式,您的代碼將在讀/寫呼叫之間自動同步。

+0

我的意思是沒有必要在這裏使用同步。因爲它建議只在UI線程上更新視圖,其餘的將由Android本身爲您處理。 – Ramit