Android RuntimeException: Impossible d'instancier le service
Je veux créer un service qui s'exécute sur un thread séparé (pas sur le Thread de l'INTERFACE utilisateur), j'ai donc mis en place une classe qui permettra de prolonger IntentService. Mais je n'ai pas de chance. Voici le code.
public class MyService extends IntentService {
public MyService(String name) {
super(name);
//TODO Auto-generated constructor stub
}
@Override
public IBinder onBind(Intent arg0) {
//TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
//TODO Auto-generated method stub
super.onCreate();
Log.e("Service Example", "Service Started.. ");
//pushBackground();
}
@Override
public void onDestroy() {
//TODO Auto-generated method stub
super.onDestroy();
Log.e("Service Example", "Service Destroyed.. ");
}
@Override
protected void onHandleIntent(Intent arg0) {
//TODO Auto-generated method stub
for (long i = 0; i <= 1000000; i++) {
Log.e("Service Example", " " + i);
try {
Thread.sleep(700);
} catch (InterruptedException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Service à la Consommation dans une Activité, cliquez sur le Bouton:
public void onclick(View view) {
Intent svc = new Intent(this, MyService.class);
startService(svc);
}
- Jetez un oeil à l'exemple: developer.android.com/reference/android/app/...
- l'exemple que vous avez lié est un
Service
pas unIntentService
!!
Vous devez vous connecter pour publier un commentaire.
Dans votre mise en œuvre concrète, vous devez déclarer un constructeur par défaut qui appelle à la
public IntentService (String name)
super constructeur de l'abstrait IntentService classe vous étendez:Vous n'avez pas besoin de remplacer onStartCommand si la super mise en œuvre s'adapte pour vous (ce que j'attends).
Dans votre cas, vous devriez obtenir une exception (Impossible d'instancier service...) - il est toujours intéressant de mettre cela dans la question.
Pas le cas ici, mais cela peut aider quelqu'un:
Vérifiez que votre service classe n'est pas abstrait. J'ai eu ce problème parce que j'avais copié IntentService mise en œuvre de SDK et l'a modifié pour mieux répondre à mes besoins.
J'ai résolu le "Impossible d'instancier le service" de l'émission, par l'ajout de la valeur par défaut constructeur sans paramètre.
ServiceDemo.java:
MyService.java:
Déclarer l'attribut suivant dans le fichier de manifeste:
Cette réponse a été mis à jour. Voici la mise à jour, la réponse correcte:
Selon la documentation que vous n'avez pas à remplacer onStartCommand() pour IntentServices, au lieu dit la documentation qui suit au sujet de onStartCommand() pour IntentServices: Vous ne devez pas remplacer cette méthode pour votre IntentService. Au lieu de cela, remplacer onHandleIntent(Intention), que le système des appels lorsque le IntentService reçoit un démarrage. (Merci à Ready4Android).
Ci-dessous est à l'origine de la réponse incorrecte (à gauche, de sorte que les observations du sens):
Selon la documentation vous devez remplacer OnStartCommand() (ou obsolète OnStart ()), afin de traiter l'intention de démarrage du service. Avez-vous essayé? Et comme K. Claszen écrit - vous avez besoin pour mettre en œuvre le constructeur par défaut.