项目刚上线,在友盟统计的数据看到闪退率达到2%以上,我擦。
io.reactivex.c.f: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | java.lang.RuntimeException: Can't toast on a thread that has not called Looper.prepare()
java.lang.RuntimeException:Can't toast on a thread that has not called Looper.prepare()io.reactivex.c.f: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | java.lang.RuntimeException: Can't toast on a thread that has not called Looper.prepare()
问题是在子线程中去进行Toast操作。
怎么解决呢。只有在ToastUtils中直接使用主线程。
例如
/*** 简单Toast 消息弹出*/public static void show(final String msg) {if (TextUtils.isEmpty(msg)) {return;}// 判断是否在主线程if (Looper.getMainLooper().getThread() != Thread.currentThread()) {QsHelper.getInstance().getThreadHelper().getMainThread().execute(new Runnable() {@Override public void run() {showToast(QsHelper.getInstance().getApplication(), msg, Toast.LENGTH_SHORT);}});} else {showToast(QsHelper.getInstance().getApplication(), msg, Toast.LENGTH_SHORT);}}