Android判断应用程序退到后台的方法(示例代码)

 更新时间:2023年03月06日 09:53:21   作者:Spig跟着fly学前端  
判断手机是否退到后台,这是我们在Android开发中实现一些功能时,经常会考虑的问题,这篇文章主要介绍了android判断应用程序退到后台的方法,需要的朋友可以参考下

 判断手机是否退到后台,这是我们在Android开发中实现一些功能时,经常会考虑的问题

比如:按HOME,BACK键时,程序退到后台,消息以Notification形式弹出 ,或者程序在服务中把App退到后台,弹出服务浮窗,点击后回到当前页面等,这些也是实现及时通讯,服务推送过程经常遇到的,比如QQ,微信消息提醒,网络电话通知展示等.

废话不多说,直接上图:

如果需要判断程序进入后台,然后显示通知,弹出通知之后,直接进入HOME键之前页面,情点击下一节

程序后台切换前台,点击通知进入当前页面

DEMO下载地址为:点击下载demo

判断手机是否退到后台,本人查阅各种资料,发现实现其实很简单,目前自己主要实现方式有两种:

方式一:

/**
* 程序是否在前台运行
*
*/
public boolean isAppOnForeground() {
 
ActivityManager activityManager = (ActivityManager) getApplicationContext()
.getSystemService(Context.ACTIVITY_SERVICE);
String packageName = getApplicationContext().getPackageName();
/**
* 获取Android设备中所有正在运行的App
*/
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;
}

这是我在网上找到的例子,

主要的实现原理就是,使用ActivityManager,首先拿到自己App的包名,再拿到Android设备中所有正在运行的App包名,

然后对所有的App进行遍历,通过判断正在运行的App中包名有没有和自己的App相等,从而判断自己的App是否退到后台.

@Override
protected void onPause() {
super.onPause();
if(!isAppOnForeground()){
Toast.makeText(getApplicationContext(), TAG+"onPause:",
Toast.LENGTH_SHORT).show();
}else {
sendBroadcast(new Intent(NotificationIntentReceiver.ACTION_ENABLE_MESSAGES)
.setClass(this, NotificationIntentReceiver.class));
Toast.makeText(getApplicationContext(), TAG+"后台运行1",
Toast.LENGTH_SHORT).show();
}
}

然后在onPause()方法中,进行判断,上面代码中实现的是,App退出后台就发送广播,然后在广播中执行Notification,然后在回到Activity时,在onResume()中清除应该清除Notification.

方法二:

这种方法主要是根据Application中实现ActivityLifecycleCallbacks回调,(可以百度ActivityLifecycleCallbacks)

ActivityLifecycleCallbacks是4.0以后新增的,

主要用于监听Activity的状态,这里主要关注onActivityStarted(Activity activity)onActivityStopped(Activity activity)两个方法,

简单的解释:

Activity在start时会走onActivityStarted方法,

而Activity在退出后台时,则会走onActivityStopped方法,所以我们可以通过这种方法实现:

int countActivity = 0;
@Override
public void onActivityStarted(Activity activity) {
countActivity++;
}
@Override
public void onActivityStopped(Activity activity) {
countActivity--;
L.i("onActivityStopped", "countActivity=" + countActivity);
if (countActivity <= 0) {
if (WDRTCSysConfig.getInstance().isCalling()) {
Intent _intent = new Intent(WDBroadcastReceiver.ACTION_ENABLE_MESSAGES);
_intent.setClass(getApplicationContext(), WDBroadcastReceiver.class);
sendBroadcast(_intent);
}
 
}
 
}

上面的代码主要原理是:我在自定义的Application中定义一个变量,主要是模拟Stack<Activity>判断等操作,

当我们一个Activity在 Start时countActivity就加一,

当我们一个Activity在 Stop时countActivity就减一,

而最后当我们countActivity值等于0时,就代表App没有Activity正在Start,程序在退到后台,然后执行我们需要执行的退到后台处理.

WDRTCSysConfig.getInstance().isCalling()只是一个布尔值得逻辑判断,我这里执行的是正在语音服务中.

APP退到后台是,发生广播,执行通知的操作.

ActivityLifecycleCallbacks的实现重写的方法如下:

public class DemoApplication extends Application implements Application.ActivityLifecycleCallbacks{
@Override
public void onCreate() {
super.onCreate();
//全局管理Activity生命周期
registerActivityLifecycleCallbacks(this);
}
 
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
 
}
 
@Override
public void onActivityStarted(Activity activity) {
 
}
 
@Override
public void onActivityResumed(Activity activity) {
 
}
 
@Override
public void onActivityPaused(Activity activity) {
 
}
 
@Override
public void onActivityStopped(Activity activity) {
 
}
 
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
 
}
 
@Override
public void onActivityDestroyed(Activity activity) {
 
}
}

到此这篇关于android判断应用程序退到后台的方法的文章就介绍到这了,更多相关android判断应用程序退到后台内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android Camera2实现最简单的预览框显示

    Android Camera2实现最简单的预览框显示

    这篇文章主要为大家详细介绍了Android Camera2实现最简单的预览框显示,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Android RecyclerLineChart实现图表绘制教程

    Android RecyclerLineChart实现图表绘制教程

    这篇文章主要为大家介绍了Android RecyclerLineChart实现图表绘制教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Android应用设置独立的多语言实战技巧详解

    Android应用设置独立的多语言实战技巧详解

    这篇文章主要为大家介绍了Android应用设置独立的多语言实战技巧详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • flutter PageView实现左右滑动切换视图

    flutter PageView实现左右滑动切换视图

    这篇文章主要为大家详细介绍了flutter PageView实现左右滑动切换视图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • iOS开发中TableView类似QQ分组的折叠与展开效果

    iOS开发中TableView类似QQ分组的折叠与展开效果

    这篇文章主要介绍了iOS开发中TableView类似QQ分组的折叠与展开效果,其实要做这个效果我先想到的是在tableView中再嵌套多个tableView。下面通过本文给大家分享实现思路,需要的朋友可以参考下
    2016-12-12
  • Android实现录音声波图

    Android实现录音声波图

    这篇文章主要为大家详细介绍了Android实现录音声波图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Android仿京东快报无限轮播效果

    Android仿京东快报无限轮播效果

    这篇文章主要为大家详细介绍了Android仿京东快报无限轮播效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • Android ExpandableListView单选以及多选实现代码

    Android ExpandableListView单选以及多选实现代码

    这篇文章主要为大家详细介绍了Android ExpandableListView单选以及多选的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Android中通过MediaStore获取音乐文件信息方法

    Android中通过MediaStore获取音乐文件信息方法

    这篇文章主要介绍了Android中通过MediaStore获取音乐文件信息方法,本文讲解了获取歌曲的名称、歌曲的专辑名、歌曲的歌手名、歌曲文件的全路径、歌曲文件的名称、歌曲文件的发行日期等音乐文件信息的方法,需要的朋友可以参考下
    2015-04-04
  • Android端部署DeepSeek的详细教程

    Android端部署DeepSeek的详细教程

    DeepSeek最近几个月很火热,很多产品以及企业都在接入DeepSeek,比如微信搜索接入,可以搜索公众号信息并总结,这个对于查一些资料还挺好用,毕竟手机才是用户用的最多的,既然谈到了手机,那么DeepSeek能否部署于手机之上呢,本文给大家介绍了android端部署的DeepSeek方法
    2025-03-03

最新评论