Android 活动有时在ProgressDialog上关闭

Android 活动有时在ProgressDialog上关闭,android,listview,android-fragments,android-asynctask,progressdialog,Android,Listview,Android Fragments,Android Asynctask,Progressdialog,我有一个带有选项卡式UI的活动,其中我通过ViewPagerAdapter加载了3个片段。 1片段(称为C)是一个简单的PreferenceFragment,1(B)只是一个TextView,最后一个片段(a)扩展片段,我用它来显示一个列表视图,其中包含设备上安装的所有软件包 当用户打开应用程序时,片段A中的AsyncTask加载包,并准备适配器传递到ListView。此外,我在AsyncTask中使用ProgressDialog来通知用户列表已经准备就绪 我给您留下一些代码: 片段C中的内部异

我有一个带有选项卡式UI的
活动
,其中我通过
ViewPagerAdapter
加载了3个片段。 1片段(称为C)是一个简单的
PreferenceFragment
,1(B)只是一个
TextView
,最后一个片段(a)扩展
片段
,我用它来显示一个
列表视图
,其中包含设备上安装的所有软件包

当用户打开应用程序时,片段A中的
AsyncTask
加载包,并准备适配器传递到
ListView
。此外,我在AsyncTask中使用ProgressDialog来通知用户列表已经准备就绪

我给您留下一些代码:

片段C中的内部异步任务:

private class AppListTask extends AsyncTask<Void, Integer, List<Map<String, Object>>> {

    Context context;

    public AppListTask(Activity context) {
        this.context = context;
    }

    @Override
    protected void onPreExecute() {
        progressDialog = new ProgressDialog(context);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setCanceledOnTouchOutside(false);
        progressDialog.setCancelable(true);
        progressDialog.show();
        progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialogInterface) {
                AppListTask.this.cancel(true);
            }
        });
    }

    @Override
    protected List<Map<String, Object>> doInBackground(Void... voids) {

        // get list of apps
        progressDialog.setMax(list.size());
        int nApps = 1;
        for(ResolveInfo info : list) {
            //work on info
            nApps++;
            publishProgress(nApps);
        }
        //return
     }

    @Override
    protected void onProgressUpdate(Integer... progress) {
        progressDialog.setProgress(progress[0]);
    }

    @Override
    protected void onPostExecute(List<Map<String, Object>> items) {
        if (progressDialog != null && progressDialog.isShowing()) {
            if (!((Activity) context).isFinishing() && !((Activity) context).isDestroyed()) {
                progressDialog.dismiss();
                progressDialog = null;
            }
        }
        //set adapter on list view
    }
}
问题是,在Note4上,它工作得很好,而在galaxy S5上,它却发生了一些奇怪的事情

如果我第一次打开应用程序,只要ProgressDialog关闭(在
onPostExecute
中),应用程序就会自动关闭,没有异常。在第二次或第三次发射时,它运行良好。 如果我根本不使用ProgressDialog,它在第一次启动时运行良好


我还尝试将ProgressDialog用作
setCancelable(false)
,但没有任何更改。

logcat中有任何错误吗?请尝试调试。看看你得到了什么。
private ProgressDialog progressDialog;

...


@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (listAdapter == null || listAdapter.isEmpty()) {
        new AppListTask(getActivity()).execute();
    }
}

@Override
public void onPause() {
    if (progressDialog != null && progressDialog.isShowing()) {
        progressDialog.dismiss();
    }
    super.onPause();
}

...