【发布时间】:2019-01-22 01:46:02
【问题描述】:
此崩溃报告仅包含系统跟踪,因为它发生在 HandlerThread 中:
java.lang.RuntimeException: 每个线程只能创建一个 Looper
在 android.os.Looper.prepare(Looper.java:107)
在 android.os.Looper.prepare(Looper.java:102)
在 android.os.HandlerThread.run(HandlerThread.java:54)
似乎已经为 HandlerThread 调用了 looper 的准备。 我只是不明白为什么 HandlerThread 的运行再次进入。它只显示系统的 java stacktrace。
我尝试多次调用 HandlerThread 的 start() 方法,它抛出 java.lang.IllegalThreadStateException,而不是 RuntimeException。
那么HandlerThread什么时候抛出这样的异常呢?
================================================ =========
HandlerThread和Handler的关键代码如下:
class MyDeviceFragment extends BaseFragment {
private HandlerThread mWorkerThread = new HandlerThread(MyDeviceFragment .class.getName());
private WorkerHandler mWorkerHandler;
{
if (mWorkerHandler == null) {
mWorkerThread.start();
mWorkerHandler = new WorkerHandler(mWorkerThread.getLooper());
}
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// xxxxx code
}
public void onDetach() {
super.onDetach();
if (mWorkerThread != null) {
mWorkerThread.quit();
}
}
private class WorkerHandler extends Handler {
WorkerHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case MSG_XXXXX1:
synchronized (mLock) {
// CODE
}
break;
case MSG_XXXXX2:
synchronized (mLock) {
// CODE
}
break;
}
}
}
}
并使用 mWorkerHandler.sendEmptyMessage(MSG_XXX) 发送消息。 mWorkerThread的初始化有点奇怪,是第三方写的,但我觉得不会导致HandlerThread抛出RuntimeException。我说的对吗?
【问题讨论】:
-
你能把你的代码贴在你得到这个错误的地方吗?