AsyncTask가 RemoteService에 바인딩되는 동안 무기한 ProgressDialog를 표시하려고합니다. RemoteService는 서비스가 처음 생성 될 때 사용자 연락처 목록을 작성합니다. 연락처 목록이 길면 5 초에서 10 초 정도 걸릴 수 있습니다.AsyncTask가 완료 될 때까지 ProgressDialog가 표시되지 않습니다.
내가 겪고있는 문제는 RemoteService가 연락처 목록을 작성하기 전까지 ProgressDialog가 표시되지 않는다는 것입니다. 나는 심지어 ProgressDialog 시간을주기 위해 Thread.sleep을 넣으려고 시도했다. sleep 문을 사용하면 ProgressDialog가로드되어 회전을 시작하지만 RemoteService가 작업을 시작하자마자 잠글 수 있습니다.
방금 AsyncTask를 더미 코드로 바꾸고 잠시 동안 잠자기 상태로두면 모든 것이 잘 작동합니다. 그러나 작업이 실제 작업을 수행해야하는 경우, UI가 앉아서 기다리는 것과 같습니다.
무엇이 잘못된 일인지에 대한 아이디어가 있습니까?
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(IM,"Start Me UP!!");
setContentView(R.layout.main);
Log.d(IM, "Building List View for Contacts");
restoreMe();
if (myContacts==null){
myContacts = new ArrayList<Contact>();
this.contactAdapter = new ContactAdapter(this,
R.layout.contactlist,
myContacts);
setListAdapter(this.contactAdapter);
new BindAsync().execute();
}
else{
this.contactAdapter = new ContactAdapter(this,
R.layout.contactlist,
myContacts);
setListAdapter(this.contactAdapter);
}
}
private class BindAsync extends AsyncTask<Void, Void, RemoteServiceConnection>{
@Override
protected void onPreExecute(){
super.onPreExecute();
Log.d(IM,"Showing Dialog");
showDialog(DIALOG_CONTACTS);
}
@Override
protected RemoteServiceConnection doInBackground(Void... v) {
Log.d(IM,"Binding to service in BindAsync");
try{
Thread.sleep(2000);
} catch (InterruptedException e){
}
RemoteServiceConnection myCon;
myCon = new RemoteServiceConnection();
Intent i = new Intent(imandroid.this,MyRemoteService.class);
bindService(i, myCon, Context.BIND_AUTO_CREATE);
startService(i);
Log.d(IM,"Bound to remote service");
return myCon;
}
@Override
protected void onPostExecute(RemoteServiceConnection newConn){
super.onPostExecute(newConn);
Log.d(IM,"Storing remote connection");
conn=newConn;
}
};
편집 : 추가 된이 onCreateDialog
protected Dialog onCreateDialog(int id){
switch(id){
case DIALOG_CONTACTS:
ProgressDialog progDialog = new ProgressDialog(imandroid.this);
progDialog.setMessage("Loading Contacts... Please Wait");
progDialog.setCancelable(false);
return progDialog;
default:
return super.onCreateDialog(id);
}
}
onCreateDialog() 코드는 어디에 있나요? – Matthias
Matthias, onCreateDialog를 추가했습니다. – tedwards