2010-09-11 16 views
0

J'ai un problème très difficile que je ne peux pas résoudre. J'ai une application que je peux mettre en mode avion à distance pour économiser de l'énergie. J'ai un thread en cours d'exécution qui reçoit le message d'économie d'énergie, supprime les rappels pour tous les autres threads, met le téléphone en mode avion, et attend un certain nombre de minutes avant de réactiver le téléphone.Android verrouillage de l'écran/chargeur de voiture est en train de tuer mon fil

Lorsque le téléphone est branché sur mon ordinateur portable (débogage USB activé, etc.), cette fonctionnalité est correcte. Le téléphone passe en mode avion, l'écran se verrouille, puis après un certain nombre de minutes, l'application «se réveille» et continue comme d'habitude. Lorsque le téléphone est branché sur un chargeur de voiture, le téléphone passe en mode avion, mais le fil ne réveille jamais le téléphone. Ce problème se produit uniquement lorsque l'écran est également défini sur le délai d'attente ... lorsque je définis l'écran pour «jamais délai d'attente» et que le téléphone est branché sur un chargeur de voiture, l'application se réveille très bien.

Il semble qu'une combinaison de la source d'alimentation et de l'expiration de l'écran tue mon thread d'économie d'énergie au niveau du système. Je sais que ce post est très spécifique à mon application, mais quelqu'un a-t-il déjà rencontré un problème similaire à celui-ci?

Répondre

1

Si vous voulez attendre n minutes, vous devez utiliser une alarme, pas un fil. Vous ne pouvez jamais supposer qu'un thread reste actif tant que votre application n'est pas au premier plan. Découvrez http://developer.android.com/reference/android/app/AlarmManager.html.

+0

Un grand merci, je vais essayer ça! –

+0

Donc, si j'utilise mon alarme pour lancer une activité après 'n' nombre de minutes, comment pourrais-je obtenir cette activité pour appeler la fonction dans ma classe parente pour 'redémarrer tous les threads'? –

+0

Vous définissez une intention dans votre alarme (via PendingIntent). Cette intention peut être tout ce que vous voulez, et il peut s'agir d'une intention spéciale qui indique à l'application de redémarrer les threads. – EboMike