android前台后台
⑴ Android实现后台返回前台再次显示广告
市面上主流的APP都是在启动页做广告展示的,即通常都是叫SplashActivity的是APP的launcher页面,在manifest文件中配置, 2017年以来, 你会发现越来越多的APP在进入后台时隔一定时间后再次回到前台会再次显示广告界面, 3s自动播放, 或者手动点击跳过
比如网易云音乐, 淘宝, 京东商城啦, 似乎现在都是很主流的做法了,刚好最近项目中也有这样的需求, 我们也实现了一遍,所以写出来分享下,相互学习借鉴
要实现后台返回前台显示广告的逻辑, 主要的点在于监听APP进入后台的时间点, 和APP从后台返回到前台的时间点
我们是在Application子类中完成的, 定义三个常量记录当前APP状态
在Application中需要监听Activity的生命周期变化, 是application类已经提供好的一个方法, 它可以非常方便的监听整个项目中的所有activity的生命周期
可以很清晰的看到Activity的生命周期函数都会回调到ActivityLifecycleCallbacks接口来, 我们让Application实现此接口, 并在相应的回调方法中的完成具体的后台状态的监听
定义几个需要用的变量记录相关状态和时间
在onResume回调中监听回到前台的判断, 只要activity一旦获取焦点这个方法都会触发,并且会触发多次
在onStop回调中监听程序进入后台的判断
在onTrimMemory中监听应用程序的切换,这也是一种监听方式.因为有时候onStop的回调不一定会完全执行(尤其是切换最近使用APP列表时),所以这个方法也是必须的
最后, 就可以得到当前APP的准确状态(sAppState)了, 是否可以再次显示广告
测试过程中,发现大部分品牌的手机都是OK的, 但是也有意外的,OPPO R9在切换应用时,一个回调都没触发,一定是Color OS改动太大, 目前尚无法处理.OV手机适配起来就是费劲啊
最后补充一个判断程序是否前台的API
各位大佬们如果有更好的实现,欢迎提供思路!
⑵ android 如何监听程序从前台转入后台
一、通过ActivityManager.RunningAppProcessInfo判断
首先,我们需要写一个BaseActivity,然后让我们应用程序的Activity都继承自BaseActivity,这样就可以统一管理,然后在BaseActivity的onResume()和onStop()方法中进行判断应用程序是否进入到后台并且是否从后台返回到了前台,直接看代码:
java">{
publicstaticbooleanisActive;//全局变量
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
}
@Override
protectedvoidonResume(){
if(!isActive){
//app从后台唤醒,进入前台
isActive=true;
Log.i("ACTIVITY","程序从后台唤醒");
}
super.onResume();
}
@Override
protectedvoidonStart(){
super.onStart();
}
@Override
protectedvoidonPause(){
super.onPause();
}
@Override
protectedvoidonStop(){
if(!isAppOnForeground()){
//app进入后台
isActive=false;//记录当前已经进入后台
Log.i("ACTIVITY","程序进入后台");
}
super.onStop();
}
@Override
protectedvoidonDestroy(){
super.onDestroy();
}
/**
*APP是否处于前台唤醒状态
*
*@return
*/
(){
=(ActivityManager)getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
StringpackageName=getApplicationContext().getPackageName();
List<ActivityManager.RunningAppProcessInfo>appProcesses=activityManager
.getRunningAppProcesses();
if(appProcesses==null)
returnfalse;
for(ActivityManager.:appProcesses){
//.
if(appProcess.processName.equals(packageName)
&&appProcess.importance==ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND){
returntrue;
}
}
returnfalse;
}
}
⑶ android 如何实现后台时用通知栏显示有新的消息,当在前台时不显示通知
前台界面和后台服务都接收同一个有序广播。前台界面优先级高,onResume是注册接收器,onStop时取消注册,接收到广播后就截断,不再向下传递给服务;后台服务优先级低,收到广播后拉起通知栏通知。
这样你打开前台界面后,就不会显示通知;前台界面关闭后,只有后台收到广播。
⑷ Android app后台回到前台时的监听
在一次项目,有个需求涉及到切后台回到app时,需要调起一个弹窗,以这个需求为例子,跟大家分享下我如何实现的(大牛轻拍 = = )
首先,我们在app初始化时,要注册activity生命周期的回调,我这边项目里在BaseApplication初始化时调用()
它需要一个ActivityLifecycleCallbacks类型的参数
这个接口涉及到所有activity生命周期的回调
回归正题,先初始化ActivityLifecycleCallbacks,
我们现在要做的是后台回前台,所以我们只选择onActivityStarted和onActivityPaused
我是这么做判断的,给个foregroundActivityCount去表示当前app有多少个activity处于启动的状态,给个Boolean值appInBackground判断app是否处于后台,每次打开app,当启动一个activity时,就统计开启activity的次数,并且调用你所需要的监听方法;只要在start 和 stop时判断有所activity都stop了,当当前activity启动次数为0时,说明app处于后台;
初始化已经完成,接下来就是怎么调用了。我们去到后台回来时需要操作的activity或者fragment,在初始化时调取BaseApplication里面刚才设定的方法
在里面写下你后台回来时你需要的操作
还有一个缺陷,假如是在指定fragment做监听怎么办?其实都差不多的,fragment在activity里,绑定 了activity的生命周期,假设我们要在指定的fragment才调取这个方法,我们需要在加一层判断,判断当前fragment是否可见
这样,只要你每次从后台回来,都可以监听到,但如果不在当前fragment的话,就不会调用你设定的方法。
以上,是我刚接触不久的问题,分享给大家,写的不好的大家见谅,有问题可以评论或私信我,本人还是实习生,请轻拍= =