此崩溃报告仅包含系统跟踪,因为它发生在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调用了循环程序的prepare。 我只是不明白为什么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。我说的对吗?
答案 0 :(得分:0)
我认为我们可以扩展HandlerThread
@Override
public void run() {
try {
super.run();
} catch (Exception e) {
LogUtil.e(TAG, "run e =" + e);
}
}
但是我不知道原因。