在我的Android应用程序中,我正在提取代码以将UI元素更新为单独的实用程序包以供重用。如果当前执行上下文来自UI线程而非非UI线程,我希望我的代码是主动的并以不同方式更新UI。
是否可以以编程方式确定当前执行是否发生在UI线程上?
我希望实现的一个简单例子是 - 我的应用程序一直更新了很多TextView
个。所以,我想有一个像这样的静态实用程序:
public static void setTextOnTextView(TextView tv, CharSequence text){
tv.setText(text);
}
如果从非UI线程调用,这显然不起作用。在这种情况下,我想强制客户端代码传入Handler
,并将UI操作发布到处理程序。
答案 0 :(得分:4)
为什么不在Activity
它需要一个runnable并且可以直接运行它(如果从UI线程调用),或者将它发布到UI线程的事件队列中。
这样您就不必担心是否已从UI线程调用了您的方法。
答案 1 :(得分:1)
当你不确定代码在UI线程上执行时,你应该这样做:
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
// your code here
}
});
这样,无论你是否在UI线程上,都将在那里执行。
答案 2 :(得分:0)