以编程方式确定代码是否从UI线程执行

时间:2011-11-15 14:04:41

标签: android

在我的Android应用程序中,我正在提取代码以将UI元素更新为单独的实用程序包以供重用。如果当前执行上下文来自UI线程而非非UI线程,我希望我的代码是主动的并以不同方式更新UI。

是否可以以编程方式确定当前执行是否发生在UI线程上?

我希望实现的一个简单例子是 - 我的应用程序一直更新了很多TextView个。所以,我想有一个像这样的静态实用程序:

public static void setTextOnTextView(TextView tv, CharSequence text){
    tv.setText(text);
}

如果从非UI线程调用,这显然不起作用。在这种情况下,我想强制客户端代码传入Handler,并将UI操作发布到处理程序。

3 个答案:

答案 0 :(得分:4)

为什么不在Activity

中使用runOnUiThread方法

它需要一个runnable并且可以直接运行它(如果从UI线程调用),或者将它发布到UI线程的事件队列中。

这样您就不必担心是否已从UI线程调用了您的方法。

答案 1 :(得分:1)

当你不确定代码在UI线程上执行时,你应该这样做:

activity.runOnUiThread(new Runnable() {
    @Override
    public void run() {
        // your code here
    }
});

这样,无论你是否在UI线程上,都将在那里执行。

答案 2 :(得分:0)

您可以使用View post方法。

您的代码将是:

tv.post(new Runnable() {

  public void run() {
     tv.setText(text);
  }

});