2017-02-25 9 views
0

問題を解決しようとしています。私のアプリケーションでは、新しいアクティビティを開始するためにonStopメソッドが呼び出されたのか、ユーザーがホームボタンをクリックした後、または別のアプリケーションに切り替えた後に呼び出されたのかを判断する必要があります。新しいアクティビティを開始するときにonStopアクティビティが呼び出されたかどうかを確認します。

私はBaseActivityクラスを持っています。ここで確認する必要があります。

私はこれを行う方法を見つけようとしましたが、残念ながら解決策はまだ見つかりませんでした。

多分、そのための回避策があります。

考え方は、onStopメソッド呼び出しのイニシエータを区別することです。

私は何か助けに感謝します。

+0

この 'otherActivity'を起動し、' onStop'フックでチェックすると 'protected boolean otherActivityCalled = false; 'を' true'に設定することができます。 'false'の場合、' currentActivity'が別の理由で停止したことを意味します。 – AnixPasBesoin

答えて

-1

あなたはそれを確認するためにSharedPreferencesを使用することができます:あなたのBaseActivityで

@Override 
    protected void onStop() { 
     super.onStop(); 
     SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); 
     pref.edit().putBoolean("IfOnStopCalled", true).apply(); 
    } 

チェック:

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); 
Boolean IfOnStopCalled = pref.getBoolean("IfOnStopCalled",false); 

if(IfOnStopCalled){ 
    //Do your action 
} 
else{ 
//Do your action 
} 
0

可能な解決策はActivityLifecycleCallbacksを登録し、その最後のアクティビティの参照名を保存することですonResumeと呼ばれる:

public class ActivityChecker implements Application.ActivityLifecycleCallbacks { 
    private static ActivityChecker mChecker; 
    private String mCurrentResumedActivity = ""; 

    public static ActivityChecker getInstance() { 
    return mChecker = mChecker == null ? new ActivityChecker() : mChecker; 
    } 

    // If you press the home button or navigate to another app, the onStop callback will be called without touching the mCurrentResumedActivity property. 
    // When a new activity is open, its onResume method will be called before the onStop from the current activity. 
    @Override 
    public void onActivityResumed(Activity activity) { 
    // I prefer to save the toString() instead of the activity to avoid complications with memory leaks. 
    mCurrentResumedActivity = activity.toString(); 
    } 


    public boolean isTheLastResumedActivity(@NonNull Activity activity) { 
    return activity.toString().equals(mCurrentResumedActivity); 
    } 

    // [...] All other lifecycle callbacks were left empty 
} 

ActivityLifecycleCallback SはあなたのApplicationクラスに登録することができます。

public class App extends Application { 

    public App() { 
    registerActivityLifecycleCallbacks(ActivityChecker.getInstance()); 
    } 

} 

はマニフェストに登録することを忘れないでください:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="your.package.name">  

    <application 
     ... 
     android:name=".App" 
     > ... 
    </application> 
</manifest> 

その後、あなたはあなたの基本活動でそれを使用することができます。カスタムアプリケーションのクラスを登録する

とActivityLifecycleCallbacks:

public class MyBaseActivity { 
    @Override protected void onStop() { 
    if(ActivityChecker.getInstance().isTheLastResumedActivity(this)) { 
     // Home button touched or other application is being open. 
    } 
    } 
} 

参考How to get current foreground activity context in android?https://developer.android.com/reference/android/app/Application.html

これを書いた後、私は、現在は活動を再開取得するために、いくつかの他のオプションと、このリンクを発見しました。

関連する問題