Skip to content

[疑惑]:下载文件配合EasyWindow使用,下载完关闭浮窗报错 #202

@hcx1002

Description

@hcx1002

问题描述【必填】

下载文件配合EasyWindow使用,下载完关闭浮窗报错,下载中时,悬浮窗的界面数值可以更新,下载完成要关闭浮窗时,却报错。既然下载中界面可以更新,为什么还会报这个错误,尝试了EventBus、AppUpdateWindow里面的handle也是一样的错误

下载文件代码:
`

 EasyHttp.download(lifecycleOwner)
                .method(HttpMethod.GET)
                .file(new File(Utils.getContext().getExternalFilesDir(null), "zds_app_update.apk"))
                .url(url)
                .listener(new OnDownloadListener() {
                    @Override
                    public void onDownloadProgressChange(File file, int progress) {
                        Button button = AppUpdateWindow.getInstance().getContentView().findViewById(R.id.update_button);
                        button.setOnClickListener(null);
                        button.setText("正在更新:"+progress);
                    }

                    @Override
                    public void onDownloadSuccess(File file) {
                        ToastUtils.success("更新下载完成,请点击安装");
                        AppsUtils.installApp(file);
                    }

                    @Override
                    public void onDownloadFail(File file, Exception e) {
                        ToastUtils.error("更新失败,请联系客服!");
                    }

                    @Override
                    public void onDownloadEnd(File file) {
                        AppUpdateWindow.getInstance().cancel();
                    }
                }).start();`

AppUpdateWindow浮窗代码:
`public class AppUpdateWindow extends EasyWindow implements LifecycleOwner {
private static AppUpdateWindow instance;
private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this);

public AppUpdateWindow(Application application) {
    super(application);
    mLifecycle.addObserver(new DefaultLifecycleObserver() {
        @Override
        public void onDestroy(@NonNull LifecycleOwner owner) {
            cancel();
        }
    });
}
public static AppUpdateWindow getInstance() {
    if (instance == null) {
        instance = new AppUpdateWindow(Utils.getContext());
        instance.setGravity(Gravity.CENTER).setOutsideTouchable(false).setBackgroundDimAmount(0.5f).setContentView(R.layout.window_app_update_hint);
    }
    return instance;
}

public void showWindow(String desc, String url) {
    Button button = instance.getContentView().findViewById(R.id.update_button);
    button.setOnClickListener((view) -> {
        LogUtils.d("点击更新" + url);
        AppUpdateApi.downloadApp(this, url);

    });
    TextView viewById = instance.getContentView().findViewById(R.id.update_desc);
    viewById.setText(desc);
    show();
}
@NonNull
@Override
public Lifecycle getLifecycle() {
    return mLifecycle;
}

}`

报错:
App Version:1.0.0(1) OS Version:12(31) Vendor:TAS-AL00(HUAWEI) CPU ABI:arm64-v8a armeabi-v7a armeabi android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:11726) at android.view.ViewRootImpl.doDie(ViewRootImpl.java:9999) at android.view.ViewRootImpl.die(ViewRootImpl.java:9975) at android.view.WindowManagerGlobal.removeViewLocked(WindowManagerGlobal.java:680) at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:614) at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:250) at com.hjq.window.EasyWindow.cancel(EasyWindow.java:892) at vip.huancaixi.zdsroot.api.AppUpdateApi$1.onDownloadEnd(AppUpdateApi.java:60) at com.hjq.http.callback.DownloadCallback.dispatchDownloadSuccessCallback(DownloadCallback.java:201) at com.hjq.http.callback.DownloadCallback.lambda$onResponse$1$com-hjq-http-callback-DownloadCallback(DownloadCallback.java:156) at com.hjq.http.callback.DownloadCallback$$ExternalSyntheticLambda2.run(Unknown Source:2) at android.os.Handler.handleCallback(Handler.java:966) at android.os.Handler.dispatchMessage(Handler.java:110) at android.os.Looper.loopOnce(Looper.java:205) at android.os.Looper.loop(Looper.java:293) at android.app.ActivityThread.main(ActivityThread.java:9685) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:586) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1211)

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions