Android

来源:互联网 发布:gson遍历json 编辑:程序博客网 时间:2024/06/05 02:32

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);    }

3.源码下载

安卓闪屏页的处理