2016-03-18 3 views
1

Я работаю над Android-приложением, и я пытаюсь зарегистрировать обратный вызов жизненного цикла активности.Регистрация активности андроид lifecylce не запускается

В моей пусковой деятельности (Agreement.java) в методе onCreate у меня есть следующие:

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

Эта активность делает чек, если соглашение было согласовано, и, если это немедленно заканчивается и вызывает LoginActivity. java, но уведомление о тосте, которое у меня есть в моей активности, вызывает класс, который не отображается, и мои сообщения с logcat также не выглядят так, как будто его увольняют.

Ниже класс LoginManager который реализует вызов активности поддерживает

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(); 
     } 
    } 

Так просто повторить, класс соглашение регистрирует жизненный цикл обратного вызова (LoginManager) мгновенно закрывается и показывает LoginActivity но тосты и LogCat не срабатывает.

Благодаря

+0

Так закомментировать все, кроме тостов и журнал ничего не производит? – Petro

+0

Итак, вы принудительно возвращаете пользователей на экран входа в систему, когда они начинают новую активность через 2 минуты? Это не мешает кому-то оставаться в активности более 2 минут ... –

+0

@ cricket_007 Мне не нужно беспокоиться об этом – Boardy

ответ

2

В вашем LoginManager классе добавить

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

И удалить

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

от Agreement.java

0

Вы установили имя класса вашего класса приложения в манифесте? Как это:

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

Кроме того, почему бы вам не ставить

registerActivityLifecycleCallbacks(this); 

внутри метода OnCreate вашего LoginManager?

0

Вы регистрируете обратный вызов слишком поздно. Действие уже создано, поэтому обратный вызов не вызывается. Вы пробовали зарегистрироваться во время onCreate Application, а не Activity? Вы можете определить свой собственный класс приложения и указать это в манифесте, указав атрибут имени приложения как свой собственный класс.

+0

«Вы можете определить свой собственный класс приложения» - Да, ясно, что это уже было сделано как 'LoginManager extends Application' –

+0

Но вы создаете LoginManager. Android не создает ваш объект приложения. Обычным потоком является то, что объект приложения или его собственный подкласс создается операционной системой при запуске приложения. – greenrobo

+0

К сожалению, я хотел сказать, что человек, который написал код, создает экземпляр объекта LoginManager вручную, и это неверно. – greenrobo