Android:为什么我不能在新线程中创建处理程序

2022-09-01 10:05:36

我在新线程中创建处理程序时遇到问题。这是我的代码:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    new Thread(new Runnable() {
        public void run() {
            Handler handler = new Handler();
        }
    }).start();
}

但它引发了一个错误!有人可以向我解释一下吗?非常感谢!

以下是我的错误的详细信息:

09-17 18:05:29.484: E/AndroidRuntime(810): FATAL EXCEPTION: Thread-75
09-17 18:05:29.484: E/AndroidRuntime(810): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
09-17 18:05:29.484: E/AndroidRuntime(810):  at android.os.Handler.<init>(Handler.java:197)
09-17 18:05:29.484: E/AndroidRuntime(810):  at android.os.Handler.<init>(Handler.java:111)
09-17 18:05:29.484: E/AndroidRuntime(810):  at com.example.handler.MainActivity$1.run(MainActivity.java:57)
09-17 18:05:29.484: E/AndroidRuntime(810):  at java.lang.Thread.run(Thread.java:856)

答案 1

您也可以使用如下所示的:HandlerThread

HandlerThread thread = new HandlerThread("MyHandlerThread");
thread.start();
Handler handler = new Handler(thread.getLooper());

HandlerThreads 与它们相关联,因此这不会引发异常。Looper


答案 2

线程在 run 方法返回后立即完成。但是由于您正在创建一个 ,因此处理程序需要线程才能运行,以便它接收消息并处理它们。lifecycleHandlerthread

因此,要发生这种情况,run 方法不应退出。因此,您需要一个循环器来无限期地等待并处理到达处理程序的消息。

new Thread(new Runnable() {
        public void run() {
            Looper.prepare();
            Handler handler = new Handler();
            Looper.loop();
        }
    }).start();

推荐