我正在处理一个包含在其他应用程序中的jar文件,它必须非常强大。
在jar中,我有一个对象,比如SomeView
,它接受一个Android上下文,尝试创建一个Handler
对象,并将触摸视图,因此需要从中初始化主线程。我怎样才能100%保证他们不会在错误的帖子中初始化我的SomeView
?
如:
public class SomeView {
Handler mHandler;
public SomeView(Context context) {
mHandler = new Handler();
}
}
即。构造函数中的if (Thread.currentThread().getId() != 1) failSafely();
会工作吗?
答案 0 :(得分:2)
我怎样才能100%保证他们不会在错误的帖子中初始化我的SomeView?
将您的代码包裹在Runnable
中并使用runOnUiThread()
(在Activity
上)或post()
(在SomeView
上)以确保其运行主要的应用程序线程。
即。将if(Thread.currentThread()。getId()!= 1)failSafely();在构造函数中工作?
我当然不会指望这一点。
使用Looper.getMainLooper().getThread()
获取代表主应用程序线程的Thread
对象。但是,我只是将线程敏感的块包装在Runnables
中,并让这些块在主应用程序线程上运行。