通过两种监听app应用启动的方式,实现广告页每次启动的效果

  1. 这种方式在application里面进行监听,根据FrameWork提供的监听来来判断启动的activity的数量来进行判断。
 registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

            }

            @Override
            public void onActivityStarted(Activity activity) {
                mFinalCount++;
                //如果mFinalCount ==1,说明是从后台到前台
                Log.e("onActivityStarted", mFinalCount +"");
                if (mFinalCount == 1){
                    //说明从后台回到了前台
                    Intent intent = new Intent(getApplicationContext(), StartActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);
                }
            }

            @Override
            public void onActivityResumed(Activity activity) {

            }

            @Override
            public void onActivityPaused(Activity activity) {

            }

            @Override
            public void onActivityStopped(Activity activity) {
                mFinalCount--;
                //如果mFinalCount ==0,说明是前台到后台
                Log.i("onActivityStopped", mFinalCount +"");
                if (mFinalCount == 0){
                    //说明从前台回到了后台
                }
            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

            }

            @Override
            public void onActivityDestroyed(Activity activity) {

            }
        });

2.在BaseActivity的里面进行监听,第种方式是通过activity全部继承,对于自身生命周期监听的方式来进行判断。

public class BaseActivity extends Activity{
    public static boolean isActive; //全局变量
    @Override
    protected void onResume() {
        Log.d("dukang", "Base onResume: ");
        if (!isActive) {
            //app 从后台唤醒,进入前台
            isActive = true;
            Log.i("ACTIVITY", "程序从后台唤醒");
//            startActivity(new Intent(this,StartActivity.class));
        }
        super.onResume();
    }

    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    @Override
    protected void onStop() {
        Log.d("DK", "onStop: 程序进入后台"+System.currentTimeMillis());
        if (!isAppOnForeground()) {
            //app 进入后台
            isActive = false;//记录当前已经进入后台
            Log.d("DK", "程序进入后台"+System.currentTimeMillis());
        }
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    /**
     * APP是否处于前台唤醒状态
     *
     * @return
     */
    public boolean isAppOnForeground() {
        ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
        String packageName = getApplicationContext().getPackageName();
        List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager
                .getRunningAppProcesses();
        if (appProcesses == null)
            return false;

        for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
            // The name of the process that this object is associated with.
            if (appProcess.processName.equals(packageName)
                    && appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                return true;
            }
        }

        return false;
    }
}

3.通过这2个方式可以完成一个常见的广告功能,使用常景:每次启动app都会跳出一个引导页面,然后显示之前的退出的页面的实现效果,具体看效果。


(流程是首先第一次启动app,进入引导页,然后过2秒进入主界面,点击跳转到第2个界面,再点击跳转到第3个界面;这个时候按HOME键退到桌面,再启动app,先进入到引导页,过2秒显示的是第3个界面,一次back键返回到桌面的一个效果)。

这里写图片描述

对于引导页,在引导页面的onCreate()方法里让它自杀。

public class StartActivity extends BaseActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                finish();
            }
        },2500);
    }
}

4.温馨提示:这里需要注意的是:第一种方式需要在AndoridManifest中为每个activity设置 android:configChanges=“orientation|keyboard|screenSize”,让他们不去重启activity,第二种方式不用设置也不会影响效果,不过还是建议添加(毕竟还是会去判断,影响性能麽),差别是该方法是通过对当前app包名的判断是否处在前台,所以不会重走activity的生命周期。

【微信公众号】
创造不易,感谢支持,更多消息请关注公众号:浅滩里的鱼

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值