相关疑难解决方法(0)

108
推荐指数
7
解决办法
9万
查看次数

如何创建Looper线程,然后立即发送消息?

我有一个工作线程,它位于后台,处理消息.像这样的东西:

class Worker extends Thread {

    public volatile Handler handler; // actually private, of course

    public void run() {
        Looper.prepare();
        mHandler = new Handler() { // the Handler hooks up to the current Thread
            public boolean handleMessage(Message msg) {
                // ...
            }
        };
        Looper.loop();
    }
}
Run Code Online (Sandbox Code Playgroud)

从主线程(UI线程,不重要)我想做这样的事情:

Worker worker = new Worker();
worker.start();
worker.handler.sendMessage(...);
Run Code Online (Sandbox Code Playgroud)

麻烦的是,这为我设定了一个漂亮的竞争条件:在worker.handler阅读时,没有办法确定工作线程已经分配给了这个领域!

我不能简单地HandlerWorker构造函数创建,因为构造函数在主线程上运行,因此Handler它将自己与错误的线程相关联.

这似乎不太常见.我可以提出几个解决方法,所有这些都是丑陋的:

  1. 像这样的东西:

    class Worker extends Thread {
    
        public volatile Handler handler; // actually private, of course …
    Run Code Online (Sandbox Code Playgroud)

multithreading android handler looper

73
推荐指数
1
解决办法
4万
查看次数

标签 统计

android ×2

multithreading ×2

android-toast ×1

handler ×1

looper ×1