为了账号安全,请及时绑定邮箱和手机立即绑定

如何关闭具有异步任务的进度对话框并避免“您的活动是否正在运行错误?

如何关闭具有异步任务的进度对话框并避免“您的活动是否正在运行错误?

慕少森 2022-08-03 16:01:58
我无法避免“无法添加窗口 - 令牌android.os.BinderProxy无效;您的活动是否正在运行?“将进度对话框与异步任务一起使用时出现异常。final ProgressDialog nDialog = new ProgressDialog(MainActivity.this);    nDialog.setMessage("Loading...");    nDialog.setIndeterminate(false);    nDialog.setCancelable(false);    if(!isFinishing()){nDialog.show();}然后,我继续:final Handler handler = new Handler();    handler.postDelayed(new Runnable() {        @Override        public void run() {           //Run code while showing progress dialog           ndialog.dismiss}    }, 1000);我开始明白,我偶尔会遇到异常,因为在访问 ndialog 时,活动将完成。因此,解决方案似乎是改变ndialog。活动完成后显示对话框的初始问题(很少发生)通过以下方式解决:if(!isFinishing()){nDialog.show();}我正在考虑为nDialog.dismiss放置相同的代码。但问题是,如果我这样做:if(!isFinishing()){nDialog.dismiss();}并且活动在此运行之前完成,用户将陷入永远不会被关闭的对话框屏幕。我错过了什么吗?如何防止此错误,但同时确保对话框将启动并被关闭?谢谢!
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

处理来自另一个线程的视图、活动和其他相关 UI 对象时要小心。像 AsyncTask 这样的线程不知道活动生命周期,你最终可能会把东西发布到死窗口。我相信这就是发生在你身上的事情。


更安全的方法:


import android.os.AsyncTask;

import android.support.annotation.NonNull;

import android.support.annotation.Nullable;


import java.lang.ref.WeakReference;


public class MyTask extends AsyncTask<Void, Void, Void> {


private final WeakReference<MyActivity> weakReferenceActivity;


public MyTask(@NonNull MyActivity activity) {

    this.weakReferenceActivity = new WeakReference<>(activity);

}


@Nullable

public MyActivity getActivity() {

    MyActivity activity = weakReferenceActivity.get();

    if (activity.isDestroyed()) {

        return null;

    }

    return activity;

}


@Override

protected void onPreExecute() {

    MyActivity activity = getActivity();

    if (activity != null) {

        activity.showProgressDialog();

    }

}


@Override

protected Void doInBackground(Void... voids) {

    [do something]

    return null;

}


@Override

protected void onPostExecute(Void nothing) {

    MyActivity activity = getActivity();

    if (activity != null) {

        activity.hide();

    }

}

}


查看完整回答
反对 回复 2022-08-03
  • 1 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号