android: fix when load image from remote server cause non ui thread touch view (#561)
This commit is contained in:
parent
9be6bb2051
commit
0668e0fe86
@ -32,16 +32,12 @@ import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.NinePatchDrawable;
|
||||
import android.os.Build;
|
||||
import android.os.Looper;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Base64;
|
||||
import android.util.Pair;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.AppCompatImageView;
|
||||
import androidx.vectordrawable.graphics.drawable.Animatable2Compat;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.RequestBuilder;
|
||||
import com.bumptech.glide.load.DataSource;
|
||||
@ -65,6 +61,10 @@ import java.io.File;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.security.MessageDigest;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.AppCompatImageView;
|
||||
import androidx.vectordrawable.graphics.drawable.Animatable2Compat;
|
||||
import pub.doric.DoricContext;
|
||||
import pub.doric.async.AsyncResult;
|
||||
import pub.doric.extension.bridge.DoricMethod;
|
||||
@ -428,16 +428,34 @@ public class ImageNode extends ViewNode<ImageView> {
|
||||
if (doricResource != null) {
|
||||
doricResource.fetch().setCallback(new AsyncResult.Callback<byte[]>() {
|
||||
@Override
|
||||
public void onResult(byte[] imageData) {
|
||||
public void onResult(final byte[] imageData) {
|
||||
if (Looper.getMainLooper() != Looper.myLooper()) {
|
||||
mView.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
loadIntoTarget(Glide.with(getContext()).load(imageData));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
loadIntoTarget(Glide.with(getContext()).load(imageData));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable t) {
|
||||
t.printStackTrace();
|
||||
DoricLog.e("Cannot load resource %s, %s", resource.toString(), t.getLocalizedMessage());
|
||||
if (Looper.getMainLooper() != Looper.myLooper()) {
|
||||
mView.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
view.setImageDrawable(null);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
view.setImageDrawable(null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinish() {
|
||||
|
Reference in New Issue
Block a user