【Android开发记录】应用设置为前台服务Foreground Service,防止被后台杀进程

在开发物联网APP时,遇到手机息屏后应用被杀死导致TCP断开的问题。通过将应用设置为前台服务解决,详细记录了创建服务、调用服务、API26以上通知构建的注意事项,包括服务声明、权限申请和允许通知的设置。实测息屏39分钟后仍能保持TCP连接。
摘要由CSDN通过智能技术生成

最近在做毕设,要开发个简单的物联网APP,第一次开发APP,需要接收单片机发来的温湿度数据,连接TCP后发现在手机息屏三分钟左右之后应用就会被杀掉,TCP断开,无法不间断的显示数据。
上网查发现有两种方法:
1,设置应用为前台服务,但会有通知栏
2,电源管理,暴力使CPU不休眠
2不到万不得已还是不愿意使用(耗电快),最后选择了1.
主要参考了这几篇博客:
创建服务类代码1
创建服务类代码2
API26以上的notification构建方法

从我一个萌新来讲,记录几点注意的地方:
1.服务的创建,参考前两篇博客,有详细代码
在这里插入图片描述

2.服务的调用,我是在主活动里面调用的,要注意不要隐式调用,好像Android5.0后必须申明Intent对象,不然会报错【Service Intent must be explicit】
3.注意API版本,26(Android8.0)之后启动服务函数变了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用以下方法获取当前应用前台服务: 1. 首先需要获取ActivityManager的实例: ```java ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); ``` 2. 然后通过getRunningAppProcesses()方法获取正在运行的进程列表: ```java List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses(); ``` 3. 遍历进程列表,找到当前进程: ```java for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) { if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { // 当前进程前台进程 String packageName = appProcess.processName; // 获取前台服务 List<ActivityManager.RunningServiceInfo> runningServices = activityManager.getRunningServices(Integer.MAX_VALUE); for (ActivityManager.RunningServiceInfo runningServiceInfo : runningServices) { if (runningServiceInfo.foreground && runningServiceInfo.process.equals(packageName)) { // 当前服务前台服务 ComponentName componentName = runningServiceInfo.service; String serviceName = componentName.getClassName(); Log.d("Foreground Service", "Service Name: " + serviceName); } } } } ``` 以上代码中,importance属性为IMPORTANCE_FOREGROUND表示当前进程前台进程。然后通过getRunningServices()方法获取当前进程正在运行的服务列表,遍历服务列表找到前台服务。 需要注意的是,如果应用没有前台服务,则该方法返回null。另外,需要在AndroidManifest.xml文件中声明android.permission.GET_TASKS权限才能获取进程列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值