第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何關閉具有異步任務的進度對話框并避免“您的活動是否正在運行錯誤?

如何關閉具有異步任務的進度對話框并避免“您的活動是否正在運行錯誤?

慕少森 2022-08-03 16:01:58
我無法避免“無法添加窗口 - 令牌android.os.BinderProxy無效;您的活動是否正在運行?“將進度對話框與異步任務一起使用時出現(xiàn)異常。final ProgressDialog nDialog = new ProgressDialog(MainActivity.this);    nDialog.setMessage("Loading...");    nDialog.setIndeterminate(false);    nDialog.setCancelable(false);    if(!isFinishing()){nDialog.show();}然后,我繼續(xù):final Handler handler = new Handler();    handler.postDelayed(new Runnable() {        @Override        public void run() {           //Run code while showing progress dialog           ndialog.dismiss}    }, 1000);我開始明白,我偶爾會遇到異常,因為在訪問 ndialog 時,活動將完成。因此,解決方案似乎是改變ndialog?;顒油瓿珊箫@示對話框的初始問題(很少發(fā)生)通過以下方式解決:if(!isFinishing()){nDialog.show();}我正在考慮為nDialog.dismiss放置相同的代碼。但問題是,如果我這樣做:if(!isFinishing()){nDialog.dismiss();}并且活動在此運行之前完成,用戶將陷入永遠不會被關閉的對話框屏幕。我錯過了什么嗎?如何防止此錯誤,但同時確保對話框將啟動并被關閉?謝謝!
查看完整描述

1 回答

?
慕斯王

TA貢獻1864條經(jīng)驗 獲得超2個贊

處理來自另一個線程的視圖、活動和其他相關 UI 對象時要小心。像 AsyncTask 這樣的線程不知道活動生命周期,你最終可能會把東西發(fā)布到死窗口。我相信這就是發(fā)生在你身上的事情。


更安全的方法:


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 關注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號