Last active
January 28, 2022 02:39
-
-
Save Folyd/54605c7996ffa893aabc to your computer and use it in GitHub Desktop.
Custom Application which can detect application state of whether it enter background or enter foreground.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Custom Application which can detect application state of whether it enter | |
* background or enter foreground. | |
* | |
* @author shuang | |
* @reference http://www.vardhan-justlikethat.blogspot.sg/2014/02/android-solution-to-detect-when-android.html | |
*/ | |
public abstract class StatusApplication extends Application implements ActivityLifecycleCallbacks { | |
public static final int STATE_UNKNOWN = 0x00; | |
public static final int STATE_CREATED = 0x01; | |
public static final int STATE_STARTED = 0x02; | |
public static final int STATE_RESUMED = 0x03; | |
public static final int STATE_PAUSED = 0x04; | |
public static final int STATE_STOPPED = 0x05; | |
public static final int STATE_DESTROYED = 0x06; | |
private static final int FLAG_STATE_FOREGROUND = -1; | |
private static final int FLAG_STATE_BACKGROUND = -2; | |
private int mCurrentState = STATE_UNKNOWN; | |
private int mStateFlag = FLAG_STATE_BACKGROUND; | |
@Override | |
public void onCreate() { | |
super.onCreate(); | |
mCurrentState = STATE_UNKNOWN; | |
registerActivityLifecycleCallbacks(this); | |
} | |
@Override | |
public void onActivityCreated(Activity activity, Bundle savedInstanceState) { | |
// mCurrentState = STATE_CREATED; | |
} | |
@Override | |
public void onActivityStarted(Activity activity) { | |
if (mCurrentState == STATE_UNKNOWN || mCurrentState == STATE_STOPPED) { | |
if (mStateFlag == FLAG_STATE_BACKGROUND) { | |
applicationWillEnterForeground(); | |
mStateFlag = FLAG_STATE_FOREGROUND; | |
} | |
} | |
mCurrentState = STATE_STARTED; | |
} | |
@Override | |
public void onActivityResumed(Activity activity) { | |
mCurrentState = STATE_RESUMED; | |
} | |
@Override | |
public void onActivityPaused(Activity activity) { | |
mCurrentState = STATE_PAUSED; | |
} | |
@Override | |
public void onActivityStopped(Activity activity) { | |
mCurrentState = STATE_STOPPED; | |
} | |
@Override | |
public void onActivitySaveInstanceState(Activity activity, Bundle outState) { | |
} | |
@Override | |
public void onActivityDestroyed(Activity activity) { | |
mCurrentState = STATE_DESTROYED; | |
} | |
@Override | |
public void onTrimMemory(int level) { | |
super.onTrimMemory(level); | |
if (mCurrentState == STATE_STOPPED && level >= TRIM_MEMORY_UI_HIDDEN) { | |
if (mStateFlag == FLAG_STATE_FOREGROUND) { | |
applicationDidEnterBackground(); | |
mStateFlag = FLAG_STATE_BACKGROUND; | |
} | |
}else if (mCurrentState == STATE_DESTROYED && level >= TRIM_MEMORY_UI_HIDDEN) { | |
if (mStateFlag == FLAG_STATE_FOREGROUND) { | |
applicationDidDestroyed(); | |
mStateFlag = FLAG_STATE_BACKGROUND; | |
} | |
} | |
} | |
/** | |
* The method be called when the application been destroyed. But when the | |
* device screen off,this method will not invoked. | |
*/ | |
protected abstract void applicationDidDestroyed(); | |
/** | |
* The method be called when the application enter background. But when the | |
* device screen off,this method will not invoked. | |
*/ | |
protected abstract void applicationDidEnterBackground(); | |
/** | |
* The method be called when the application enter foreground. | |
*/ | |
protected abstract void applicationWillEnterForeground(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment