使用 Android Looper 仍然抛出“Can't create handler inside...”
Posted
技术标签:
【中文标题】使用 Android Looper 仍然抛出“Can\'t create handler inside...”【英文标题】:Using Android Looper still throwing "Can't create handler inside..."使用 Android Looper 仍然抛出“Can't create handler inside...” 【发布时间】:2014-08-29 21:04:57 【问题描述】:我有一个活套和处理程序:
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);
【问题讨论】:
我认为这篇文章回答了我的问题:***.com/questions/17476847/… 可以发一下worker任务的代码吗?你的LooperThread没问题 【参考方案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();
【讨论】:
以上是关于使用 Android Looper 仍然抛出“Can't create handler inside...”的主要内容,如果未能解决你的问题,请参考以下文章
Handler的工作原理。为啥在子线程中使用Handler会抛出异常
RxJava 无法在未调用 Looper.prepare() 的线程内创建处理程序
ClipboardManager 抛出以下错误:Can't create handler inside thread that has not called Looper.prepare() usin