アプリとして今foregroundにあるのか?backgroundに回っているのか?を検知するクラス。
- アプリ起動時には○○しない、などの処理に使用した。
ActivityLifecycleCallbacksを拡張する
[参考]
これをベースにさせてもらいました。ActivityのonResume
,onPause
で生きているactivityを判定するとFragment系で作っている画面が関わってくるとこの判定が狂う。
今回はほぼすべてのクラスが継承している親Activityが存在したので、そのActivityのライフサイクルを見て判断することにした。
MyLifecycleHandler
public class MyLifecycleHandler implements Application.ActivityLifecycleCallbacks {
private boolean isForeground = false;
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
if (activity instanceof CommonActivity) {
isForeground = true;
}
}
@Override
public void onActivityPaused(Activity activity) {
if (activity instanceof CommonActivity) {
isForeground = false;
}
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
/**
* アプリが前面にいるかどうかを取得します.
* @return Foregroundにいたら<code>true</code>,backgroundにいたら<code>false</code>をかえします
*/
public boolean isForeground() {
return isForeground;
}
}
ApplicationクラスでHandlerを持っておく
Applicationクラスがhandlerをメンバー変数で持っておいた。
public class MyApplication extends Application {
@Override
public void onCreate() {
lifecycleHandler = new MyLifecycleHandler();
}
~
public boolean isAppForeground(){
return lifecycleHandler.isForeground();
}
アプリがforegroundかどうか取得する
foreground判定が必要なところで、
if(((MyApplication)context.getApplicationContext()).isAppForeground())
などで判定する。
もっとスマートにできたらいいのに!