2010-11-15 5 views
1

J'ai ce code dans mon AsyncTask:ProgressDialog se bloque lorsque vous essayez d'exécuter un service avec un AsyncTask

@Override 
protected void onPreExecute() { 
    waitDialog = new ProgressDialog(context);   
    waitDialog.setTitle(R.string.wait_title);   
    waitDialog.setMessage(context.getString(R.string.wait_body)); 
    waitDialog.setIndeterminate(true); 
    waitDialog.show(); 
} 

@Override 
protected Boolean doInBackground(Void... unused) { 
    Intent serviceIntent = new Intent(context, PublisherService.class); 
    saveSettings(false); 
    startService(serviceIntent); 
    return serviceIsRunning(); 
} 

montre la fenêtre, mais alors que mon service démarre (et il prend quelques secondes), le ProgressDialog est gelé . Si j'utilise un SystemClock.sleep() simple dans mon appel doInBackground() cela fonctionne très bien. Est-ce que quelqu'un peut me dire pourquoi cela se produit et comment résoudre le problème?

Merci

Répondre

1

Vous ne devez démarrer aucun service à partir de threads ou d'asynctasks. Le service pourrait démarrer son propre thread et effectuer tous les travaux là-bas. Ou il est possible de lier le service dans onPreExecute() et d'appeler ses méthodes depuis doInBackground. Lire l'exemple de service local ici http://developer.android.com/reference/android/app/Service.html

+0

Pourriez-vous expliquer pourquoi on ne devrait pas démarrer un service à partir d'une asyncTask? Intéressé de comprendre pourquoi. – Spinner

0

Si vous utilisez SystemClock.sleep() où? Vous voulez dire au lieu de créer un service? Eh bien d'abord tous les services et toute autre activité est créée sur le fil de l'interface utilisateur. Donc, démarrer votre service dans un asynctask ne fait rien.

+0

Oui, au lieu de créer un service. La création d'un service gèle l'interface utilisateur mais sleep() ne le fait pas. Comment devrais-je le faire alors? –

Questions connexes