gpt4 book ai didi

android - 从 MainActivity 关闭 AsyncTask 中的对话框

转载 作者:行者123 更新时间:2023-11-30 02:11:55 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com