12
votes

Garder l'activité sur quand l'écran est éteint

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?


2 commentaires

Pouvez-vous élaborer pourquoi vous voulez faire cela?


Partagez ce que vous essayez d'atteindre, nous pourrons peut-être fournir une solution alternative.


7 Réponses :


6
votes

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 . Vous devez reconstruire l'état de l'application chaque fois que l'écran est retourné. Supposons toujours que l'activité peut être essuyée de la mémoire à tout moment.


0 commentaires

0
votes

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.


0 commentaires

0
votes

Vous ne pouvez pas remplacer la méthode OnDestroy () et chaque version du système d'exploitation gère la manière dont une application est "tuée" différemment.

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 Ondestroy ), 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 . Sur toutes les versions d'Android, les applications qui sont renvoyées de OnStop ou OnDestroy sont silencieusement tuées. Sur les versions de Android avant d'abîmer, les applications qui étaient renvoyées de Onpause 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é.

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- OnDestroy , il faut éviter, puisque le processus tuera également ces threads. Cela pourrait causer toutes sortes de problèmes de corruption et d'arrêt.

source


3 commentaires

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 () et onresume () mais comprend que ondestroy () pourrait être appelé lorsque l'écran est éteint.


De plus, ce n'est pas certain Ondestroy () Toujours sera appelé.



0
votes

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 .

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.


0 commentaires

0
votes

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>

  • créer une classe qui étend une application li>
  • Enregistrez-le dans votre manifeste: Li>
  • 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);
    
    • en publicité publique à onterminate () {..., ajoutez ceci: li> ul> li> ul>

      si (BroadCastreCeiver! = null) { context.unregisterReceiver (Broadcastructeur); } code> p> p>


2 commentaires

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.



1
votes

Vous ne pouvez pas faire ça. Il sera tué quand même. Mais vous pouvez utiliser un service pour recevoir la diffusion de inent.action_screen_on et relance activité de service. Pour redémarrer votre activité de service check ici


0 commentaires

0
votes

Lame pirate serait d'appeler la méthode onpaause () à l'intérieur de l'activité de l'activité


0 commentaires