【问题标题】:Handler constructor stops a thread in Android处理程序构造函数在 Android 中停止一个线程
【发布时间】:2013-07-17 14:22:52
【问题描述】:

发生了一些奇怪的事情。我无法显示所有代码,但情况是这样的;

Runnable program = new Runnable() {
    @Override 
    public void run() {
        //This code is running
        new Handler();
        //This code not running
}};
new Thread(program).start();

日志什么也没显示。主线程运行良好。

【问题讨论】:

标签: android multithreading handler


【解决方案1】:

您应该始终在 UI 线程中声明 Handler。您需要为 Handler 提供来自某个线程的 Looper。例如来自主 UI 线程:

 Handler mHandler = new Handler(Looper.getMainLooper());

Handler 始终在Looper 线程上下文中运行。当您创建另一个线程时,它的上下文与Looper 不同。正确的解决方案是始终在 onCreate()onStart()onResume() 中声明 Handlers

【讨论】:

    【解决方案2】:

    创建Handler 需要先对该线程进行Looper 轮询。顺便说一句,通常不需要在 inside 非 UI 线程中创建 Handler。在可运行文件之外创建一个处理程序。一个更简单的替代方法是使用runOnUiThread() 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-07
      • 2019-01-26
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 2013-01-11
      • 2013-04-03
      • 2023-03-10
      相关资源
      最近更新 更多