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) {