푸시 알림 작업 중입니다. 문제는 내가 매우 거대하고 양식을 완전히로드하기 전에 알림을받는 알림을 클릭하면 5-6 초 후에 빈 화면이 나타납니다 양식을로드 할 때입니다. 예외는 dialog.dismiss 때문입니다.활동이 파괴되었지만 asynctask가 여전히 실행 중입니다.
내 이해에 따르면 알림을 여는 동안 현재 활동이 삭제되고 새로운 활동이 만들어집니다. 새로운 액티비티를 만드는 동안 asynctask를 사용하여 내 앱에서 다른 기능을 수행합니다. 따라서 현재 액티비티가 파기되면 액티비티 컨텍스트는 null이지만 asynctask는 여전히 진행 대화 상자를 실행 중입니다. 액티비티가 파괴 되 자마자 대화 상자를 표시 할 창이 없으므로 창에서 예외가 누출됩니다.
아무도 나를이 문제에서 벗어나도록 도울 수 있습니다. 앱이 오랫동안 유휴 상태 일 때 빈 화면이 나타나면 알림을 엽니 다.
활동이 삭제되는 즉시 asynctask 실행을 중지 할 수있는 방법이 있습니까?
내 코드는 다음과 같습니다
공용 클래스 MainActivity 내가들의 OnDestroy()에서 활동 컨텍스트를 인쇄하려 활동 {
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 **
}
}
}
}
}
를 확장하고는 null입니다.
또한 난을 복원하려면 asynctask의 인스턴스를 작성하고 작성 될 새 활동으로 전달하십시오. – user1525410