android-Comment faire pour exécuter le Service dans l'autre thread que le thread principal?
Je suis en train de développer une application android qui comprend un service permettant de lire la valeur du capteur pendant plusieurs heures. Lorsque je démarre le service de mon appareil se bloque et tous les autres processus est devenu lent. Pour résoudre ce problème j'ai essayer de startservice dans le thread séparé comme indiqué ci-dessous, mais le problème est toujours là.
new Thread(new Runnable() {
@Override
public void run() {
Intent intent=new Intent(getApplicationContext(), SensorService.class);
startService(intent);
}
}).start();
ce fil uniquement démarrer le service dans les différents thread mais le service exécuté dans le thread principal.
Svp quelqu'un peut m'aider comment faire pour exécuter le service dans le thread séparé ?
Vous devriez poster le code que vous essayez d'exécuter afin que nous puissions voir exactement ce que vous faites. Ma conjecture est que le code que vous avez dans votre service doit être exécuté sur un nouveau thread. Merci de poster le service que vous essayez d'exécuter.
OriginalL'auteur praveen | 2013-10-24
Vous devez vous connecter pour publier un commentaire.
Les composants de l'Application (services, activités, etc) toujours exécuter dans le thread principal, n'importe quel fil, ils sont commencé à partir.
Envisager de commencer fil dans votre Service, ou d'utiliser un
IntentService
.Dans votre cas particulier, vous pouvez essayer de vous inscrire mondiale
BroadcastReceiver
pour capteur de changements, qui, à son tour,va commencer uneIntentService
de mettre nouvellement acquis les valeurs en db, etc.En fait, voici le lien à semblable question résolu.
Encore une fois, ce n'est pas vraiment un multithreading question. L'ensemble de la tâche doit être mis en œuvre dans l'autre sens.
J'ai peur de longue tâche en cours d'exécution qui enregistre les événements à 70ms permettra de vider la batterie très rapidement.
j'ai utilisé du fil de sommeil pour résoudre les problème de batterie..
dans mon esprit, il est préférable d'utiliser
AlarmManager
.OriginalL'auteur Eugene
Vous pouvez utiliser les Services d'arrière-plan pour résoudre ce problème. À l'aide d'un
Thread
avecsleep()
pour une instance particulière donnera la solution à la vôtre problèmeArrière-Plan De Services
Ce lien Va vous aider..
Ou à l'Aide de
PendingIntent
va vous aider, comme...OriginalL'auteur gowri
Tout ce que vous faites là est le lancement de la nouvelle activité, donc si votre logique pour courir le moniteur est en
SensorService
, il est toujours va être sur le thread principal. Vous avez besoin de mettre de la surveillance de la logique dans le nouveau thread, pas simplement lancer l'activité.Si vous essayez d'exécuter un service sur un thread d'arrière-plan, vous devez utiliser la statique
performOnBackgrounThread
méthode comme ce code qui peut être trouvé dans l'Android documentation (android-8\SampleSyncAdapter\src\com\example\android\samplesync\client\NetworkUtilities.java):Il est également important de se rappeler que vous ne voulez jamais à effectuer les opérations de réseau sur l'INTERFACE Principale du fil. Non pas que vous avez ici, juste pour info...
et j'essaie de lancer un nouveau service qui n'est pas une nouvelle activité..
voir mon edit pour ma réponse
code fourni par vous n'est pas de travail.. service encore en cours d'exécution dans le thread principal. je veux exécuter dans le thread différent..
Vous devriez poster le code que vous essayez d'exécuter afin que nous puissions voir exactement ce que vous faites.
OriginalL'auteur BlackHatSamurai
vous pouvez essayer d'utiliser
AsyncTask
, veuillez lire cette documentation.http://developer.android.com/reference/android/os/AsyncTask.html
startService
être fait dans un thread différent.OriginalL'auteur harsha.cs