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

cur*_*zen 5 android

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

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

我想要实现的一个简单的例子就是这个 - 我的应用程序一直在更新很多内容TextView.所以,我想有一个像这样的静态实用程序:

public static void setTextOnTextView(TextView tv, CharSequence text){
    tv.setText(text);
}
Run Code Online (Sandbox Code Playgroud)

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

kin*_*aam 4

为什么不使用 runOnUiThread 方法Activity

它需要一个可运行对象,并且要么立即运行它(如果从 UI 线程调用),要么将其发布到 UI 线程的事件队列。

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