1
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。这是为什么?

4

1 回答 1

1

在这段代码中:

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

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

getHandler()第 2行调用对象并返回从未设置为任何WorkerThread值的成员变量,所以它是workerHandlernull

第 3 行启动线程。

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

请看一下HandlerThreadAndroid提供的。它几乎与此相同。搜索教程或示例以了解如何使用它。例如:http ://stephendnicholas.com/archives/42

于 2013-02-20T22:13:42.540 回答