安卓 假设"main/UI thread" ID始终为1是否安全?



我正在开发一个包含在其他应用程序中的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中,并让这些块在主应用程序线程上运行。

最新更新