我正在处理推送通知。问题是当我加载一个非常大的表单并且我收到通知时,在表单完全加载之前我尝试点击通知我在 5-6 秒后得到一个空白屏幕。异常是由于 dialog.dismiss。
据我了解,在打开通知时,当前活动被销毁,一个新活动被创建。在创建新活动时,我正在使用 asynctask 在我的应用程序中完成一些其他功能。因此,当当前活动被销毁时,活动上下文为空,但 asynctask 仍在运行,同时还有进度对话框。一旦活动被破坏,就没有窗口显示对话框,因此窗口泄漏异常。
任何人都可以帮助我摆脱这个问题。当应用程序长时间空闲时,我也会得到空白屏幕,然后我打开通知。
有没有办法在活动被破坏后立即停止运行异步任务。
我的代码是:
公共类 MainActivity 扩展 Activity {
private MyProgressDialog myProgressDialog;
public LinearLayout mainPanel;
private VMobilet mobilet = null;
private String mobiletId;
private String formId ;
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(mainPanel);
Intent i = getIntent();
mobiletId = i.getStringExtra("Mobilet Id");
formId = i.getStringExtra("Form ID");
VUiHelper.getInstance().setIsFinish(false);
myProgressDialog = MyProgressDialog.show(MainActivity.this,"","",true);
BackgroundTask backgroundTask = new BackgroundTask();
backgroundTask.execute(MainActivity.this);
}
@Override
protected void onPause() {
super.onPause();
if(VUiHelper.getInstance().isFinish())
{
this.finish();
}
else {
System.out.println("pausing mainactivity");
}
}
@Override
protected void onDestroy() {
super.onDestroy();
System.out.println("mainactivity ondestroy called");
if(mobilet != null)
mobilet.getForms().clear();
mobilet = null;
mainPanel = null;
VUiHelper.getInstance().clearControlCache();
VUiHelper.getInstance().MediaInput.clear();
System.gc();
}
private class BackgroundTask extends AsyncTask<Context, String, Boolean> {
@Override
public void onPreExecute() {
super.onPreExecute();
}
@Override
protected Boolean doInBackground(Context... arg0) {
if (mobiletId != null) {
** some logic **
}
return true;
}
@Override
public void onPostExecute(Boolean status){
super.onPostExecute(status);
myProgressDialog.dismiss(); //dismissing the progress dialogs
if (mobilet != null) {
** some logic **
} else {
** some logic **
}
}
}
}
}
我尝试在 onDestroy() 中打印活动上下文,它为空。