在 MainActivity
中,我有一个 AsyncTask
,其中显示了一个 ProgressDialog
,从 onPreExecute()
开始> 。如果 doInBackground()
中的处理崩溃,那么我会得到这个异常:
Activity us.nm.state.mmd.MainActivity 已泄漏窗口 com.android.internal.policy.impl.PhoneWindow$DecorView
我相信它正在发生,因为在 Activity 停止时对话框仍在显示。我看到的 AsyncTask/Progress 对话框的例子都在 AsyncTask
类中有对话框。
我想尝试关闭 Activity.onPause() 方法中的对话框(如下所示),但由于对话框在 AsyncTask
类中声明,MainActivity
确实可以访问它。
我将对话框的实例化移动到 MainActivity
。所以 onPause()
确实得到了调用并且调用了 dismiss()
发生了,但是这是在设备上出现“Unfortunately MyApp has stopped”消息很久之后。
我该怎么做?
public class MainActivity extends AppCompatActivity implements ActionBar.TabListener {
private ProgressDialog nDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
nDialog = new ProgressDialog(mainActivity);
nDialog.setMessage(resources.getString(R.string.loading));
nDialog.setTitle(resources.getString(R.string.loading));
nDialog.setIndeterminate(false);
nDialog.setCancelable(false);
String url = "http://----------------------------------------";
Fragment myFragment = mTabsPageAdapter.getItem(TabsPagerAdapter.MY_TAB);
new LoadAndStoreDataTask((OnLoadAndStoreCompleteListener)permitsFragment, nDialog).execute(url);
}
@Override
public void onPause(){
super.onPause();
if(nDialog != null)
nDialog.dismiss();
}
}
private class LoadAndStoreDataTask extends AsyncTask <String, Integer, String> {
private ProgressDialog nDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
Resources resources = getResources();
nDialog.show();
}
protected String doInBackground(String... urls) {
....
}
@Override
protected void onPostExecute(String result) {
if (nDialog != null) {
nDialog.dismiss();
}
}
@Override
protected void onCancelled() {
if (nDialog != null) {
nDialog.dismiss();
}
}
最佳答案
改变
private class LoadAndStoreDataTask extends AsyncTask <String, Integer, String> {
private ProgressDialog nDialog;
到
private class LoadAndStoreDataTask extends AsyncTask <String, Integer, String> {
因此该任务将使用 MainActivity nDialog 字段而不是 LoadAndStoreDataTask 类中的字段
关于android - 从 MainActivity 关闭 AsyncTask 中的对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29974359/