2016-08-13 93 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

相关问题