2016-03-18 23 views
1

私はアンドロイドアプリを開発中です。アクティビティライフサイクルのコールバックを登録しようとしています。私は、次のを持ってonCreate方法で私のランチャー活性(Agreement.java)でアンドロイドの活動ライフサイクルが登録されていません。

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

この活動は、契約が合意されている場合はチェックを行い、そしてその直後に終了し、LoginActivityを呼び出す場合。私の活動コールバッククラスで持っているトースト通知は表示されず、どちらもログカットメッセージを表示しないので、起動したようには見えません。以下は

だから繰り返すために、契約クラスはライフサイクルコールバック(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

から

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

を削除して、ログが何も生成しませんか? – Petro

+0

2分後に新しいアクティビティを開始すると、強制的にログイン画面に戻ります。これは誰かがアクティビティに2分以上滞在するのを止めるものではありません... –

+0

@ cricket_007私はそれについて心配する必要はありません – Boardy

答えて

2

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

を追加するので、トースト以外のすべてをコメントアウトAgreement.java

0

マニフェストでアプリケーションクラスのクラス名を設定しましたか?このように:

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

また、なぜあなたはあなたのLoginManagerののonCreateメソッド内

registerActivityLifecycleCallbacks(this); 

を入れないのですか?

0

コールバックを登録するタイミングが遅すぎます。アクティビティはすでに作成されているため、コールバックは呼び出されません。アクティビティではなくアプリケーションのonCreateで登録しようとしましたか?独自のApplicationクラスを定義し、アプリケーション名属性をカスタムクラスとして指定することで、マニフェストにそのことを示すことができます。あなたのLoginManagerクラスで

+0

"自分のアプリケーションクラスを定義することができます" - はい、明らかに既に完了しています'LoginManager extends Application'によると –

+0

LoginManagerをインスタンス化しています。 Androidはあなたのアプリケーションオブジェクトを作成していません。通常の流れでは、アプリケーションを起動すると、アプリケーションオブジェクトまたはそのカスタムサブクラスがオペレーティングシステムによってインスタンス化されます。 – greenrobo

+0

申し訳ありませんが、コードを書いた人がLoginManagerオブジェクトを手動でインスタンス化していて、それが正しくないと言います。 – greenrobo