我正在开发一个包含在其他应用程序中的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();
会起作用吗?
我如何才能100%保证他们不会在错误的线程中初始化我的SomeView?
将代码封装在Runnable
中,并使用runOnUiThread()
(在Activity
上)或post()
(在SomeView
上)来确保它在主应用程序线程上运行。
即如果(Thread.currentThread().getId()!=1) failSafely();在建造师的工作中?
我当然不会指望这一点。
使用Looper.getMainLooper().getThread()
获取代表主应用程序线程的Thread
对象。但是,我只是将线程敏感的块封装在Runnables
中,并让这些块在主应用程序线程上运行。