转载请注明出处:https://blog.csdn.net/mythmayor/article/details/73608942
1.有很多知名程序的闪屏页都是这样的效果:
首次进入程序时展示闪屏页,程序进入后台以后再次打开程序时不展示闪屏页,程序进程被杀死后再次进入程序展示闪屏页。
2.功能实现:
要实现这个功能的话,我首先想到的是Activity的生命周期,不过很快这种想法就被pass掉了。之后我的思路是,判断应用程序是否在后台,如果在后台的话再次打开的时候就不展示闪屏页,如果不在后台的话就展示闪屏页。然后尝试了很多种方式来判断程序是否在后台运行,不过均没有什么效果。然而最后还是让我找到了一种方法,直接上代码:
SplashActivity.java的关键代码
private void startMyActivity(boolean isFromBackstage) {
final boolean isUserLogin = PrefUtil.getBoolean(MainApplication.mContext, MyConstant.isUserLogin, false);
if (isUserLogin) {
if (isFromBackstage) {
IntentUtil.startActivity(SplashActivity.this, MainActivity.class);
finish();
} else {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
IntentUtil.startActivity(SplashActivity.this, MainActivity.class);
finish();
overridePendingTransition(R.anim.anim_static, R.anim.anim_static);
}
}, 2000);
}
} else {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
IntentUtil.startActivity(SplashActivity.this, LoginActivity.class);
finish();
overridePendingTransition(R.anim.anim_static, R.anim.anim_static);
}
}, 2000);
}
}
// 用于判断是否从后台返回或者是否到后台
public static boolean isAppWentToBg = false;
public static boolean isWindowFocused = false;
public static boolean isBackPressed = false;
@Override
public void onBackPressed() {
isBackPressed = true;
super.onBackPressed();
}
@Override
protected void onStart() {
startMyActivity(isAppWentToBg);
if (isAppWentToBg) {
isAppWentToBg = false;
// 从后台返回
//ToastUtil.showToast(this, "从后台返回");
}
super.onStart();
}
@Override
protected void onStop() {
super.onStop();
if (!isWindowFocused) {
isAppWentToBg = true;
// 进入后台
//ToastUtil.showToast(this, "进入后台");
}
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
isWindowFocused = hasFocus;
if (isBackPressed && !hasFocus) {
isBackPressed = false;
isWindowFocused = true;
}
super.onWindowFocusChanged(hasFocus);
}