Android是否可以安全地假设“主/ UI线程”ID始终为1?

时间:2013-12-15 23:20:14

标签: java android multithreading

我正在处理一个包含在其他应用程序中的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();会工作吗?

1 个答案:

答案 0 :(得分:2)

  

我怎样才能100%保证他们不会在错误的帖子中初始化我的SomeView?

将您的代码包裹在Runnable中并使用runOnUiThread()(在Activity上)或post()(在SomeView上)以确保其运行主要的应用程序线程。

  

即。将if(Thread.currentThread()。getId()!= 1)failSafely();在构造函数中工作?

我当然不会指望这一点。

使用Looper.getMainLooper().getThread()获取代表主应用程序线程的Thread对象。但是,我只是将线程敏感的块包装在Runnables中,并让这些块在主应用程序线程上运行。