活动已泄露窗口如何修复此异常


public class LoadDataTask extends AsyncTask<String, String, Void> {
    ArrayList<Datamodel> list;
    ProgressDialog pDialog;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(ContactActivity.this);
        pDialog.setTitle("loading Contact");
        pDialog.setMessage("Please wait...");
        pDialog.setCanceledOnTouchOutside(false);
        pDialog.show();
    }
    @Override
    protected Void doInBackground(String... params) {
        boolean isDbEmpty = loadContactFromDb();
        _GetLocation();
        if (isDbEmpty) {
            publishProgress("Sync Contact");
            String numbers = fetchContacts();
            list = uploadPhoneNumber(numbers);
            System.out.println("count :: " + list.size());
        }
        return null;
    }
    @Override
    public void onProgressUpdate(String... strings) {
        pDialog.setTitle(strings[0]);
    }
    public boolean loadContactFromDb() {
        DataBaseManager dbManager = new DataBaseManager(
                ContactActivity.this);
        list = dbManager.fetchContactList(_mylat,_mylong);
        if (list == null || list.isEmpty()) {
            return true;
        }
        return false;
    }
    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        DBHelper.dbBackup();
        mDataModelArray.clear();
        mDataModelArray.addAll(list);
        mAdapter.notifyDataSetChanged();
        schedueService();
        if(pDialog!=null && pDialog.isShowing()){
            pDialog.dismiss();
}
    }
}

这是我的代码,我在 pDialog.show(( 上得到异常; at com.lociiapp.ContactActivity$LoadDataTask.onPreExecute(ContactActivity.java:495(活动已泄露窗口com.android.internal.policy.impl.PhoneWindow$DecorView

我试图应用条件,然后它也不起作用

您必须持续检查后台线程是否正在运行。

if(!isCancelled())
{
    super.onProgressUpdate(values);
    dialog.setProgress(valueToUpdate);  
}
else
{
    dialog.dismiss();
    dialog=null;
}

在运行调用它的 LoadDataTask 之前显示对话框

最新更新