gpt4 book ai didi

Android Loopers :Unable to get messages from UIThread to worker thread

转载 作者:行者123 更新时间:2023-11-30 03:46:01 25 4
gpt4 key购买 nike

private Handler workerHandler; // instance variable of UIThread

在 onCreate() 方法中

WorkerThread wt = new WorkerThread();
workerHandler = wt.getHandler();
wt.start();

使用下面的 SeekBar 监听器方法将消息发送到 WorkerThread 的队列

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
tv.setText(String.valueOf(progress));
workerHandler.sendMessage(workerHandler.obtainMessage(99,String.valueOf(progress)));
}

工作线程:

private Handler handler;

//getHandler() method

public void run() {
super.run();
Looper.prepare();

handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 99)
Log.d("RTR","Message from Main Thread:"+(String)msg.obj);
}
};

Looper.loop();

但是当我更改 SeekBar 时,出现“程序不幸停止”消息。可能是什么原因?

更新:问题出在工作线程 workerHandler 的处理程序上。它仍然是 null。这是为什么?

最佳答案

在这段代码中:

WorkerThread wt = new WorkerThread();
workerHandler = wt.getHandler();
wt.start();

第 1 行实例化一个新的 WorkerThread 对象并调用其构造函数。 注意:这实际上并没有创建一个正在运行的线程,也没有调用run()方法

第 2 行在 WorkerThread 对象上调用 getHandler() 并返回成员变量 workerHandler ,它从未被设置为任何东西,所以它是 null

第 3 行启动线程。

问题是线程中的 run() 方法直到 第 3 行执行后才被调用。

请看一下Android提供的HandlerThread。它几乎和这个做同样的事情。搜索教程或示例以了解如何使用它。例如:http://stephendnicholas.com/archives/42

关于Android Loopers :Unable to get messages from UIThread to worker thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14989158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com