【问题标题】:Using Android Looper still throwing "Can't create handler inside..."使用 Android Looper 仍然抛出“Can't create handler inside...”
【发布时间】:2023-03-18 07:13:01
【问题描述】:

我有一个活套和处理程序:

private Handler handler;

public class LooperThread extends Thread
{
    @Override
    public void run()
    {
        Looper.prepare();
        handler = new Handler()
        {
            @Override
            public void handleMessage(Message message)
            {
                updateUI(message.obj);
            }
        };

        Looper.loop();
    }
}

然后在我的 MainActivity 中调用:

new LooperThread().start();
new Thread(new WorkerTask()).start();

WorkerTask 实现 Runnable 的地方。

无法在未调用 Looper.prepare() 的线程内创建处理程序。

在我的 workerTask 中,它在第二行抛出错误:

locationManager = (LocationManager) activity.getSystemService(activity.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);

【问题讨论】:

标签: android


【解决方案1】:

如果这是在 Activity 或 Fragment 中,您可以简单地使用 runOnUiThread 来更新 ui。

【讨论】:

    【解决方案2】:

    你需要使用这个:

    activity.runOnUiThread(new Runnable() {
      public void run() {
        updateUI(message.obj);
      }
    });
    

    或者将它与您现有的代码一起使用:

    private Handler handler;
    
    public class LooperThread extends Thread
    {
        @Override
        public void run()
        {
            Looper.prepare();
            handler = new Handler()
            {
                @Override
                public void handleMessage(Message message)
                {
                    activity.runOnUiThread(new Runnable() {
                    public void run() {
                        updateUI(message.obj);
                    }
                    });
                }
            };
    
            Looper.loop();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-08-28
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 2011-10-07
      • 2014-09-02
      • 1970-01-01
      相关资源
      最近更新 更多