2016-03-18 24 views
1

Bir android uygulaması üzerinde çalışıyorum ve etkinlik yaşam döngüsü geri çağırma işlemini kaydetmeye çalışıyorum. onCreate yöntemde benim başlatıcısı aktivite (Agreement.java) olarakAndroid aktivite yaşam döngüsünü kaydettirme

Ben şu var: Anlaşma kararlaştırılmış olup olmadığını

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

Bu aktivite bir çek yapar ve eğer öyleyse hemen bitirir ve LoginActivity çağırır. java ama benim faaliyetimde bulunan tost bildirimi geri arama sınıfı görünmüyor ve ne benim logcat mesajlarımı yapıyor, hem de onun işten çıkması gibi görünmüyor. Aşağıda

etkinlik çağrısı uygulayan LoginManager sınıf
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(); 
     } 
    } 

Dolayısıyla, sadece yinelemek için destek olup, anlaşma sınıf yaşam döngüsü geri arama (LoginManager) anında kapanır kaydeder ve LoginActivity gösterir ama tost ve logcat değil tetiklemiştir. Eğer Manifestte uygulamanız sınıfın sınıf adını ayarlamak

Teşekkür

+0

den

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

kaldırmak ve günlük bir şey üretir? – Petro

+0

2 dakika sonra yeni bir etkinlik başlattıklarında kullanıcıları zorla Giriş ekranına alıyorsunuz? Bu, bir Aktivitede 2 dakikadan daha uzun bir süre kalmaktan vazgeçmiyor ... –

+0

@ cricket_007 Bu konuda endişelenmenize gerek yok – Boardy

cevap

2

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

eklemek Ve Yani tost dışındaki herşeyi yorumlama Agreement.java

0

mü? Şunun gibi:

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

Ayrıca, neden LoginManager ait onCreate yöntemi içinde

registerActivityLifecycleCallbacks(this); 

koymuyorsun?

0

Geri aramayı çok geç kayıt ediyorsunuz. Etkinlik zaten oluşturuldu, bu nedenle geri çağırma yapılmıyor. Aktivite yerine, onCreate of Application süresince kayıt yapmayı denediniz mi? Kendi Uygulama sınıfınızı tanımlayabilir ve özel sınıf olarak uygulama adı niteliğini belirterek bildirimde bunu belirtebilirsiniz. senin LoginManager sınıfında

+0

"Kendi Uygulama sınıfınızı tanımlayabilirsiniz" - Evet, bu zaten yapıldı LoginManager 'Application' –

+0

'u genişletiyor ancak SignManager'ı başlatıyorsunuz. Android, Uygulama nesnesini oluşturmuyor. Normal akış, uygulamayı başlattığınızda bir Uygulama nesnesinin veya özel alt sınıfının işletim sistemi tarafından başlatılmasıdır. – greenrobo

+0

Maalesef, kodu yazan kişinin LoginManager nesnesini el ile başlattığını ve bu doğru olmadığını söylemek istedim. – greenrobo

İlgili konular