2011-08-12 8 views
1

AsyncTask에 의해 업데이트되는 ProgressDialog가있는 활동이 있습니다. onCreateDialog를 사용하여 대화 상자를 설정하고 있습니다. AsyncTask가 SDCard에 쓰고 있습니다. 정상적인 scenarious (회전, 배경으로가는 등) 동안 나는 문제가 없다.프로세스가 종료되고 다시 시작될 때 onCreateDialog가 호출되지 않도록 방지

문제는 프로세스가 종료되면 대화 상자가 다시 생성된다는 것입니다. 따라서 AsyncTask를 업데이트하지 않기 때문에 "새로"열어 놓은 액티비티와 대화 상자가 표시되지 않습니다.

예를 들어 SD 카드가 배출기를 얻는 경우 Reaper가 와서 프로세스를 종료합니다 (onDestroy, noPause, noResume이 프레임 워크에서 호출되지 않았습니다). 그러나 응용 프로그램이 다시 시작되면 (예 : 최근에 사용한 응용 프로그램) AsyncTask가 없다는 단서가없고 대화 상자를 표시해야합니다. 나는 응용 프로그램이 충돌하기 때문에 onCreateDialog에서 null을 반환 할 수 없습니다.

프로세스가 종료 된 후 대화 상자가 다시 생성되는 것을 방지하려면 어떻게합니까?

예 : 활동이 더 AsyncTask를가 없습니다 새로 재현되는 시간으로

 
- Activity gets shown 
    - onCreateDialog/onPrepareDialog show a progress dialog 
     - AsyncTask gets started exporting to SD card 
=> SD card gets unmounted 
- Process is killed 
- User selects the application from task switched 
- Activity gets created as new 
=> Android calls onCreateDialog/onPrepareDialog with the previously shown dialog ID 

, 심지어에는 SD 카드가 없습니다. 아직도, 안드로이드는 내가 대화를 보여줄 것을 주장한다.

어떻게하면 다시 만들 때 onCreate/PrepareDialog 메서드가 호출되지 않도록 할 수 있습니까? 또는 유일한 선택은 대신 오류 대화 상자를 표시하는 것입니다. 가 삽입되거나

String state = Environment.getExternalStorageState(); 

통해 그것은 당신이 당신의 대화를 제어 할 수 있습니다 반환 값의 이상 배출되는 경우

답변

0

당신은

0

이 onCreateDialog 방법이되는 것입니다에서 onCreate 방법처럼 ... SD 카드를 통해 확인 할 수있다 당신의 활동에서 한 번만 부름받습니다. 이 방법을 사용하여 대화 상자를 제어 할 수 없습니다. 대신 당신의 액티비티는 Dialog가 나타날 때마다 호출 될 다음 코드를 가져야한다. 따라서이 방법 대신 내부적으로 처리해야합니다.

@Override 
protected void onPrepareDialog(int id, Dialog dialog) { 
    super.onPrepareDialog(id, dialog); 
     } 
관련 문제