J'ai un service qui commence une nouvelle activité, tandis que l'écran est éteint. Je veux que l'activité reste en mode pause et ne pas arriver au mode arrêté. Y a-t-il un moyen d'y parvenir? P>
7 Réponses :
Non. Vous n'avez pas de contrôle sur le cycle de vie d'activité. Tous les processus que vous devez exécuter pendant que l'écran est désactivé doit être exécuté dans un service code>. Vous devez reconstruire l'état de l'application chaque fois que l'écran est retourné. Supposons toujours que l'activité
code> peut être essuyée de la mémoire à tout moment. P>
Il n'y a aucun moyen de y parvenir. Votre application est liée au cycle de vie de l'activité et doit décomposer / restaurer les activités pour travailler avec le cycle de vie. p>
Vous ne pouvez pas remplacer la méthode le Documentation de développeur Android fait référence à une application dans un État "tuéable". Tandis que Android essaie de conserver le processus d'une application résident même après sa sortie (c'est-à-dire après De plus, tandis que les applications peuvent exécuter des threads indigènes même quand ils sont assurés
Etat et même post- source p> OnDestroy () CODE> et chaque version du système d'exploitation gère la manière dont une application est "tuée" différemment. P>
Ondestroy code>), il doit être capable de tuer ces processus dans des situations à faible ressource pour récupérer la mémoire. Les états dans lesquels une application est tuée différente par version du système d'exploitation forte>. Sur toutes les versions d'Android, les applications qui sont renvoyées de
OnStop code> ou
OnDestroy code> sont silencieusement tuées. Sur les versions de Android avant d'abîmer, les applications qui étaient renvoyées de
Onpause code> ont également été tuées. Être tuéable signifie que Android se réserve le droit de résilier le processus de votre application à tout moment sans courir même une autre instruction du code de votre application. En d'autres termes, si vous avez un état qui doit être recouvrable (comme le progrès du jeu, les articles, les récompenses, etc. de joueur, vous devez sauvegarder ceux-ci au stockage persistant au plus tard au dernier rappel avant d'entrer un état assuré. P>
OnDestroy code>, il faut éviter, puisque le processus tuera également ces threads. Cela pourrait causer toutes sortes de problèmes de corruption et d'arrêt. P>
mais je veux que mon activité soit montrée lorsque l'écran est aussi rapide que possible
Si je comprends bien, vous devriez être capable de le faire via onpaause () code> et
onresume () code> mais comprend que
ondestroy () code> pourrait être appelé lorsque l'écran est éteint.
De plus, ce n'est pas certain Ondestroy () Toujours sera appelé.
Je ne sais pas exactement ce que vous voulez dire avec le mode pause ou en mode arrêté. Si vous voulez dire que la CPU continue de se réveiller, jetez un coup d'œil à Ce . p>
avec partal_wake_look Vous pouvez avoir une longue course d'asyncaptage de courant, par exemple lorsque l'écran est de. N'oubliez pas de libérer le wakelook. P>
Pourquoi avez-vous besoin de faire cela? Peut-être que la meilleure solution consiste à l'exécuter comme service comme suggéré par @deev. Cependant, en fonction de ce que vous devez faire, cela pourrait aider:
Demander à Android de vous avertir lorsque l'écran est activé (et éteint si nécessaire). Donc, votre activité peut être reprise et démarrée immédiatement et vous pouvez effectuer n'importe quelle action. P>
Pour ce faire: P>
dans le vide public surcreate () {..., ajoutez ceci: p>
Intentionfilter iOff = Nouvelle intentefilter (intention.action_screen_off); p>
Intentionfilter ion = Nouvelle intentefilter (intention.acte_screen_on); p>
broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (Intent.ACTION_SCREEN_OFF.equals(action)) { //TODO } else { //TODO } } }; context.registerReceiver(broadcastReceiver, ioff); context.registerReceiver(broadcastReceiver, ion);
si (BroadCastreCeiver! = null) {
context.unregisterReceiver (Broadcastructeur);
} code> p> p>
Vérifiez ce lien: Thinkandrod.WordRress .COM / 2010/01/24 / ...
Merci, j'utilise déjà ce genre de choses, le problème est que l'écran sur réagit vraiment lentement, alors je travaille avec l'écran de, et j'essaie de me garder en vie.
Vous ne pouvez pas faire ça. Il sera tué quand même.
Mais vous pouvez utiliser un service code> pour recevoir la diffusion de
inent.action_screen_on code> et relance b> activité de service.
Pour redémarrer votre activité de service check ici P>
Lame pirate serait d'appeler la méthode onpaause () à l'intérieur de l'activité de l'activité p>
Pouvez-vous élaborer pourquoi vous voulez faire cela?
Partagez ce que vous essayez d'atteindre, nous pourrons peut-être fournir une solution alternative.