IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Différence entre l'émulateur et le téléphone pour OnRestart()


Sujet :

Android

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 52
    Points : 60
    Points
    60
    Par défaut Différence entre l'émulateur et le téléphone pour OnRestart()
    bonjour,

    j'ai une activité A (DeclencheTime.class) qui passe en arrière plan :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
    			mainIntent.addCategory(Intent.CATEGORY_HOME);
    			startActivity(mainIntent);
    Avec une alarme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //Récupération de l'instance du service AlarmManager.
    		AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
     
    		//On instancie l'Intent qui va être appelé au moment du reveil.
    		Intent intent = new Intent(this, AlarmReceiver.class);
     
    		//On créer le pending Intent qui identifie l'Intent de reveil avec un ID et un/des flag(s)
    		PendingIntent pendingintent = PendingIntent.getBroadcast(this, ALARM_ID, intent, 0);
    lorsque l'alarme s’exécute :
    je dois revenir vers l'activité appelante et passer par le OnRestart();
    voici le code de AlarmReceiver :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    public class AlarmReceiver extends BroadcastReceiver{
     
    	public static final int ID_NOTIFICATION = 1963;
     
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		try {
    			NotificationManager notificationManager = 
    				(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
     
     
    		Notification notification = new Notification(R.drawable.seBalader,
    				"notification Se Balader !", System.currentTimeMillis());
     
    		Intent defineIntent = new Intent(context, DeclencheTime.class);
     
    		defineIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP);
     
    	       final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, defineIntent, 0);
    Sur l'émulateur cela marche très bien, je passe par le OnRestart() et j'affiche mes TextView().

    Mes dès que j'exécute mon code sur le Téléphone via USB celui-ci ne passe pas par le OnRestart()

    Je ne comprend rien Du tout, y a t'il des différences fondamentales entre l'émulateur et le téléphone ????

    même en mettant singleTop sur l'activité et en changeant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    defineIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT  );
    Par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		defineIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    qui signifie d'effacer l'ensemble des activités qui sont sur la tâche

    cela marche sur l'émulateur mais pas sur téléphone.
    en plus je ne passe pas par le OnRestart(); Mais par le OnResume();

    peut-être parce que l'activité DeclencheTime.class et une MapActivity
    je ne comprend rien du tout

    Comment placer une activité en haut de la tâche et passer par le OnRestart() ???


    Merci de vos réponses
    cordialement

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Il y a une différence entre l'emulateur et le téléphone. Dés fois l'emulateur lance deux fois l'activity pour je ne sais quelle raison.

    Si tu as une application avec des plusieurs activité, l'activité appelé sera recréer si celle ci n'était pas la dernière affiché. Comme tu reviens sur le HomeScreen l'activité sera recréer.

    Du coup onCreate, onStart, onResume.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  3. #3
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 52
    Points : 60
    Points
    60
    Par défaut je galère
    merci pour ta réponse, car j'ai mis résolu car personne, ne m'a répondu depuis quelques jours. Donc j'ai décidé de chercher seul.

    Effectivement l'activité est recréé j'ai mis une log qui permet de le voir.
    cela se passe sur le téléphone et non sur l'émulateur. Sur ce dernier cela marche nickel. Mais sur le téléphone il recrée l'activité, dès que tu passes en HOMESCREEN.

    Alors comment je peux mettre en arrière plan de HOMESCREEN mon activité et revenir sur appel de notification, au premier plan et bien sur en ne passant pas par Oncreate() !!!!!

    je galère comme ce n'est pas possible !!!!!!

    j'ai même placé SingleTop / SingleInstance / SingleTask rien n'y fait, il recrée l'activité, J'ai peut-être une option sur GalaxY S3 qui inhibe ce comportement

    je n'en sait rien du tout !!!

    merci quand même.

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Le homescreen est une application un peu spéciale, il ne peut pas y avoir d'activité "derrière" (un back ne ramène pas l'activité précédente). Il se peut donc qu'Android décide de supprimer l'activité, ou même directement supprimer l'application de la mémoire (rare à mon avis)... Dans tous les cas, Android considère l'application comme very-low-priority (et sera la première à partir si besoin de ressources).

    Maintenant pourquoi utiliser "onRestart()" ? La fonction n'est appelée *que* si l'activité est toujours en mémoire (donc onStart() va être appelé, sans passer par onCreate() avant). C'est un sorte de onCreate() bis, sans intent.

    Il y a aussi onNewIntent() qui peut être utilisé.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    j'ai même placé SingleTop / SingleInstance / SingleTask rien n'y fait, il recrée l'activité, J'ai peut-être une option sur GalaxY S3 qui inhibe ce comportement
    Tu ne feras rien avec ces options, ces options sont juste là pour savoir si tu veux une multi-instance de ton application/activity ou une single.

    L'activity se créera de toute manière après un retour vers le HomeScreen, cela tu n'y peux rien.
    Il se peut donc qu'Android décide de supprimer l'activité
    Attention l'activité n'est pas supprimé, mais supprimé en mémoire, elle fait toujours partie de la stack, juste le contenue n'est plus existant (d'où la création lors de son appel).

    Alors comment je peux mettre en arrière plan de HOMESCREEN mon activité et revenir sur appel de notification, au premier plan et bien sur en ne passant pas par Oncreate() !!!!!
    Après comme le dit Nicroman, ne t'attardes pas sur le fonctionnement de onRestart et essaye d'avoir un comportement cohérent sur le onStart. Les bundles peuvent t'aider là dessus par exemple, pour connaître l'état précédent de ton activity.

    le onNewIntent, cela est utile pour les multi-instances !!
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  6. #6
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 52
    Points : 60
    Points
    60
    Par défaut merci pour votre aide
    je vous remercie pour votre aide. Je pense qu'il faut que je revois mon activité, ou la scinder en 2.

    merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA pour Excel] Différence entre activate et select
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/10/2008, 17h20
  2. Réponses: 5
    Dernier message: 30/09/2008, 09h43
  3. Les différences entre Qt3 et GTK pour développer en C ?
    Par piwee dans le forum Bibliothèques
    Réponses: 4
    Dernier message: 12/01/2006, 16h03
  4. Réponses: 2
    Dernier message: 12/01/2006, 10h28
  5. différence entre varchar et text pour l'occupation mémoire
    Par champion dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/12/2004, 18h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo