JessYanCoding / JessYanCoding/AndroidAutoSize
AutoSize1.2.1版本导致线程调度抛异常Not in applications main thread
- Lingua principale
- Java
- Stelle
- 13.7k
- Fork
- 2k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
autosize/src/main/java/me/jessyan/autosize/utils/Preconditions.java中checkMainThread方法的调用导致线程异常,使用Thread或rxJava等线程,执行部分操作会触发"Not in applications main thread"异常。
具体表现:
1.Thread中进行下载并更新通知栏下载进度,下载完成后设置通知栏完成状态点击可安装,这时就会抛出IllegalStateException"Not in applications main thread",完成通知消息无法显示并无法弹出系统安装;
2.
private void setQRImage(String qrcodeString, ImageView mQrcodeImage, boolean isCicle) {
if (TextUtils.isEmpty(qrcodeString)) return;
Observable.create(new Observable.OnSubscribe() {
@Override
public void call(Subscriber subscriber) {
Bitmap bitmap;
try {
int size = (int) Utils.dpTopx(255f);
bitmap = QRCodeUtil.creatQrCode(qrcodeString, size, size, BitmapFactory.decodeResource(mQrcodeImage.getContext().getResources(), R.mipmap.app_icon), 0);
subscriber.onNext(!isCicle ? bitmap : BitmapUitl.drawRoval(BitmapUitl.ALL, bitmap));
} catch (WriterException e) {
e.printStackTrace();
subscriber.onError(e);
}
subscriber.onCompleted();
}
}).compose(TransformUtils.defaultSchedulers())
.subscribe(new Observer() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Bitmap bitmap) {
mQrcodeImage.setImageBitmap(bitmap);
}
});
}
以上代码生成二维码,同样抛出IllegalStateException"Not in applications main thread"
3.同上使用RxJava call中使用Glide.get()方法获取Bitmap,调用两次时同样会抛出异常
4.使用友盟分享SDK进行小程序、单图分享功能,当图片为本地图片时无法进行分享,查看友盟SDK相关代码,同样使用了线程获取本地图片,获取时抛异常导致;
解决:
public static void checkMainThread() {
if (Looper.myLooper() != Looper.getMainLooper()) {
throw new IllegalStateException("Not in applications main thread");
}
}
不应该抛异常,调整成返回值供外部调用即可
public static boolean checkMainThread() {
return Looper.myLooper() == Looper.getMainLooper();
}
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Valutazione
Questa issue non è ancora stata valutata.