Android 活动有时在ProgressDialog上关闭
我有一个带有选项卡式UI的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中的内部异
活动
,其中我通过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();
}
...