web-dev-qa-db-fra.com

Comment exécuter une application Android en arrière-plan?

Ce code exécutera une application automatiquement après le démarrage du système, mais l'application se fermera après avoir appuyé sur le bouton de retour.

Si l'application fonctionne normalement en cliquant sur son icône. Il fonctionnera en continu même après avoir appuyé sur le bouton de retour ou exécuté d'autres applications.

public class AutoBoot extends BroadcastReceiver {
    @Override        
    public void onReceive(Context context, Intent intent) {                
        Intent i = new Intent(context, MyActivity.class); 
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);          
    }
}

Ma question est, comment faire en sorte que ce code d'exécution automatique s'exécute en continu même après avoir appuyé sur le bouton Retour ou exécuté d'autres applications?

26
JBMagallanes

Vous pouvez probablement démarrer un Service ici si vous souhaitez que votre application s'exécute en arrière-plan. C'est à cela que sert le service dans Android sont utilisés - en arrière-plan et en effectuant des opérations de longue date.

[~ # ~] mise à jour [~ # ~]

Vous pouvez utiliser START_STICKY pour que votre service fonctionne en continu.

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    handleCommand(intent);
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}
17
Lalit Poptani

Le démarrage d'une activité n'est pas la bonne approche pour ce comportement. Au lieu de cela, votre BroadcastReceiver doit utiliser une intention de démarrer un service qui peut continuer à fonctionner aussi longtemps que possible. (Voir http://developer.Android.com/reference/Android/app/Service.html#ProcessLifecycle )

Voir aussi Service persistant

4
Jonah

Comme les applications s'exécutent en arrière-plan de toute façon. Je suppose que ce que vous demandez vraiment, c'est comment faire pour que les applications fassent des choses en arrière-plan. La solution ci-dessous fera fonctionner votre application en arrière-plan après son ouverture et après le redémarrage du système.

Ci-dessous, j'ai ajouté un lien vers un exemple pleinement fonctionnel (sous la forme d'un Android Studio Project)

Ce sujet semble être hors de portée des documents Android, et il ne semble pas y avoir de document complet sur ce sujet. Les informations sont réparties sur plusieurs documents.

Les documents suivants vous indiquent indirectement comment procéder: https://developer.Android.com/reference/Android/app/Service.html

https://developer.Android.com/reference/Android/content/BroadcastReceiver.html

https://developer.Android.com/guide/components/bound-services.html

Dans le but d'obtenir des exigences d'utilisation correctes, la partie importante de ce document ci-dessus à lire attentivement est: #Binder, #Messenger et le lien des composants ci-dessous:

https://developer.Android.com/guide/components/aidl.html

Voici le lien vers un exemple pleinement fonctionnel (au Android format Studio): http://developersfound.com/BackgroundServiceDemo.Zip

Ce projet lancera une activité qui se lie à un service; la mise en œuvre de l'AIDL.

Ce projet est également utile pour re-factoriser dans le but de IPC sur différentes applications.

Ce projet est également développé pour démarrer automatiquement lorsque Android redémarre (à condition que l'application ait été exécutée au moins une fois après l'installation et que l'application ne soit pas installée sur la carte SD)

Lorsque cette application/ce projet s'exécute après le redémarrage, il utilise dynamiquement une vue transparente pour donner l'impression qu'aucune application n'a démarré, mais le service de l'application associée démarre proprement.

Ce code est écrit de telle manière qu'il est très facile pour Tweak de simuler un service planifié.

Ce projet est développé conformément aux documents ci-dessus et est par la suite une solution propre.

Il y a cependant une partie de ce projet qui n'est pas propre: je n'ai pas trouvé de moyen de démarrer un service au redémarrage sans utiliser d'activité. Si l'un de vous lisez cet article, vous avez un moyen clair de le faire, veuillez poster un commentaire.

4
user2288580