diff --git a/README.md b/README.md index a19b38a0..527a5b69 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ xUtils 包含了orm, http(s), image, view注解, 但依然很轻量级(251K), #### 使用Gradle构建时添加以下依赖即可: ```javascript -implementation 'org.xutils:xutils:3.8.9' +implementation 'org.xutils:xutils:3.8.10' ``` #### 混淆配置参考示例项目sample的配置 diff --git a/build.gradle b/build.gradle index 8ae5711a..ae85645d 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.6.1' + classpath 'com.android.tools.build:gradle:4.0.0' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4' classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml index e1d93f20..dc4c2b96 100644 --- a/sample/src/main/res/values/strings.xml +++ b/sample/src/main/res/values/strings.xml @@ -5,5 +5,5 @@ 移除 停止 开始下载 - http://dl.bintray.com/wyouflf/maven/org/xutils/xutils/3.8.9/xutils-3.8.9.aar + http://dl.bintray.com/wyouflf/maven/org/xutils/xutils/3.8.10/xutils-3.8.10.aar \ No newline at end of file diff --git a/xutils/build.gradle b/xutils/build.gradle index c08a8f56..0fd7d44d 100644 --- a/xutils/build.gradle +++ b/xutils/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'com.jfrog.bintray' def siteUrl = 'https://github.com/wyouflf/xUtils3' def gitUrl = 'https://github.com/wyouflf/xUtils3.git' group = "org.xutils" -version = "3.8.9" +version = "3.8.10" android { compileSdkVersion 28 diff --git a/xutils/src/main/java/org/xutils/common/task/AbsTask.java b/xutils/src/main/java/org/xutils/common/task/AbsTask.java index fe6ddbc4..37cf580c 100644 --- a/xutils/src/main/java/org/xutils/common/task/AbsTask.java +++ b/xutils/src/main/java/org/xutils/common/task/AbsTask.java @@ -1,5 +1,7 @@ package org.xutils.common.task; +import android.os.Looper; + import org.xutils.common.Callback; import java.util.concurrent.Executor; @@ -57,6 +59,10 @@ public Executor getExecutor() { return null; } + public Looper customLooper() { + return null; + } + protected final void update(int flag, Object... args) { if (taskProxy != null) { taskProxy.onUpdate(flag, args); diff --git a/xutils/src/main/java/org/xutils/common/task/TaskProxy.java b/xutils/src/main/java/org/xutils/common/task/TaskProxy.java index 21da954a..4d231545 100644 --- a/xutils/src/main/java/org/xutils/common/task/TaskProxy.java +++ b/xutils/src/main/java/org/xutils/common/task/TaskProxy.java @@ -22,6 +22,7 @@ private final AbsTask task; private final Executor executor; + private final Handler handler; private volatile boolean callOnCanceled = false; private volatile boolean callOnFinished = false; @@ -30,6 +31,16 @@ this.task = task; this.task.setTaskProxy(this); this.setTaskProxy(null); + + // set handler + Looper looper = task.customLooper(); + if (looper != null) { + handler = new InternalHandler(looper); + } else { + handler = sHandler; + } + + // set executor Executor taskExecutor = task.getExecutor(); if (taskExecutor == null) { taskExecutor = sDefaultExecutor; @@ -85,42 +96,42 @@ public void run() { @Override protected void onWaiting() { this.setState(State.WAITING); - sHandler.obtainMessage(MSG_WHAT_ON_WAITING, this).sendToTarget(); + handler.obtainMessage(MSG_WHAT_ON_WAITING, this).sendToTarget(); } @Override protected void onStarted() { this.setState(State.STARTED); - sHandler.obtainMessage(MSG_WHAT_ON_START, this).sendToTarget(); + handler.obtainMessage(MSG_WHAT_ON_START, this).sendToTarget(); } @Override protected void onSuccess(ResultType result) { this.setState(State.SUCCESS); - sHandler.obtainMessage(MSG_WHAT_ON_SUCCESS, this).sendToTarget(); + handler.obtainMessage(MSG_WHAT_ON_SUCCESS, this).sendToTarget(); } @Override protected void onError(Throwable ex, boolean isCallbackError) { this.setState(State.ERROR); - sHandler.obtainMessage(MSG_WHAT_ON_ERROR, new ArgsObj(this, ex)).sendToTarget(); + handler.obtainMessage(MSG_WHAT_ON_ERROR, new ArgsObj(this, ex)).sendToTarget(); } @Override protected void onUpdate(int flag, Object... args) { // obtainMessage(int what, int arg1, int arg2, Object obj), arg2 not be used. - sHandler.obtainMessage(MSG_WHAT_ON_UPDATE, flag, flag, new ArgsObj(this, args)).sendToTarget(); + handler.obtainMessage(MSG_WHAT_ON_UPDATE, flag, flag, new ArgsObj(this, args)).sendToTarget(); } @Override protected void onCancelled(Callback.CancelledException cex) { this.setState(State.CANCELLED); - sHandler.obtainMessage(MSG_WHAT_ON_CANCEL, new ArgsObj(this, cex)).sendToTarget(); + handler.obtainMessage(MSG_WHAT_ON_CANCEL, new ArgsObj(this, cex)).sendToTarget(); } @Override protected void onFinished() { - sHandler.obtainMessage(MSG_WHAT_ON_FINISHED, this).sendToTarget(); + handler.obtainMessage(MSG_WHAT_ON_FINISHED, this).sendToTarget(); } @Override @@ -165,6 +176,10 @@ private InternalHandler() { super(Looper.getMainLooper()); } + private InternalHandler(Looper looper) { + super(looper); + } + @Override @SuppressWarnings("unchecked") public void handleMessage(Message msg) {