2016-03-18 2 views
1

Je travaille sur une application android et j'essaie d'enregistrer le rappel du cycle de vie de l'activité.Enregistrement de la vie de l'activité Android n'est pas déclenché

Dans mon activité de lancement (Agreement.java) dans la méthode onCreate je donne les résultats suivants:

this.getApplication().registerActivityLifecycleCallbacks(new LoginManager()); 

Cette activité effectue une vérification si l'accord a été convenu, et si oui termine immédiatement et appelle LoginActivity. java mais la notification de toast que j'ai dans ma classe de rappel d'activité ne montre pas et ne fait pas non plus mes messages de logcat de sorte qu'il ne ressemble pas à son se faire virer.

Ci-dessous est la classe LoginManager qui implémente l'appel d'activité soutient

public class LoginManager extends Application implements Application.ActivityLifecycleCallbacks 
{ 
    private final String TAG = "LoginManager"; 
    @Override 
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) 
    { 
     Toast.makeText(activity, "Activity Created", Toast.LENGTH_LONG).show(); 
     Log.d(TAG, "Activity Created"); 
     long currentEpochTime = System.currentTimeMillis()/1000l; 
     Log.d(TAG, "Current Epoch: " + currentEpochTime); 
     CommonTasks commonTasks = new CommonTasks(activity); 
     SharedPreferences settings = commonTasks.getAppsSharedPreferences(); 

     long timeDifference = currentEpochTime - settings.getLong(Defines.SharedPreferenceSettings.LAST_ACTIVE_EPOCH, 0); 
     Log.d(TAG, "Time Difference: " + timeDifference); 
     if (timeDifference >= 120) //2 Minutes 
     { 
      Log.d(TAG, "Logging out"); 
      //Over 2 minutes so we need to logout 
      Intent intent = new Intent(activity, LoginActivity.class); 
      intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      activity.startActivity(intent); 
     } 
     else 
     { 
      Log.d(TAG, "Not Logging Out"); 
      //No need to logout, save the current time 
      SharedPreferences.Editor editor = settings.edit(); 
      editor.putLong(Defines.SharedPreferenceSettings.LAST_ACTIVE_EPOCH, currentEpochTime); 
      editor.commit(); 
     } 
    } 

Donc, juste pour rappel, la classe d'accord enregistre le rappel du cycle de vie (LoginManager) ferme instantanément et montre LoginActivity mais le pain grillé et logcat n'est pas déclenché.

Merci

+0

Ainsi, commentant tout sauf le pain et le journal ne produit rien? – Petro

+0

Vous ramenez donc de force les utilisateurs à l'écran de connexion lorsqu'ils commencent une nouvelle activité après 2 minutes? Cela n'empêche pas quelqu'un de rester dans une activité pendant plus de 2 minutes ... –

+0

@ cricket_007 Je n'ai pas besoin de m'inquiéter à ce sujet – Boardy

Répondre

2

Dans votre classe ajouter LoginManager

@Override 
    public void onCreate() { 
     super.onCreate(); 
     registerActivityLifecycleCallbacks(this); 
    } 

Et enlever

this.getApplication().registerActivityLifecycleCallbacks(new LoginManager()); 

de Agreement.java

0

Est-ce que vous avez défini le nom de classe de votre classe d'application dans le manifeste? Comme ceci:

<application 
android:name=".LoginManager" 
android:theme="@style/AppTheme"> 

Aussi, pourquoi ne pas vous mettre

registerActivityLifecycleCallbacks(this); 

à l'intérieur de votre méthode onCreate LoginManager?

0

Vous enregistrez le rappel trop tard. L'activité est déjà créée afin que le rappel ne soit pas appelé. Avez-vous essayé de vous inscrire lors de la création d'une application plutôt que d'une activité? Vous pouvez définir votre propre classe Application et l'indiquer dans le manifeste en spécifiant l'attribut de nom d'application en tant que classe personnalisée.

+0

"Vous pouvez définir votre propre classe d'application" - Oui, clairement cela a déjà été fait selon 'LoginManager extends Application' –

+0

Mais vous instanciez LoginManager. Android ne crée pas votre objet Application. Le flux normal est qu'un objet Application ou sa sous-classe personnalisée est instancié par le système d'exploitation lorsque vous lancez l'application. – greenrobo

+0

Désolé, je voulais dire que la personne qui a écrit le code instancie l'objet LoginManager manuellement et ce n'est pas correct. – greenrobo