android9.0以上当切换程序后,service在后台运行一分钟左右就自动停止的解决方案

您所在的位置:网站首页 安卓怎么关闭后应用运行 android9.0以上当切换程序后,service在后台运行一分钟左右就自动停止的解决方案

android9.0以上当切换程序后,service在后台运行一分钟左右就自动停止的解决方案

2024-07-01 22:10| 来源: 网络整理| 查看: 265

service作为安卓四大组件之一,在开发项目中很多人都会用到,不知道大家有没有发现,在android9.0以上的系统,如果你在app启动了一个service,当你切换到另一个app时,在之前的安卓系统service还是会在运行的,但是当升级到android9.0的系统,你会发现,service在后台运行一分钟左右就会自动停止了,下面来给大家介绍一下如何使service一直在后台运行:

首先我们来了解一下官方文档上android9.0默认关掉后台运行的service的原因:

1、在后台运行应用会消耗设备的有限资源,如内存或者电池电量,进而影响用户的使用体验,比如说,后台任务可能会缩短设备的续航时间,或者在用户玩游戏、看视频或拍照时造成系统卡顿。

2、为了改善续航表现和用户体验,Android 在版本演进的过程中,针对后台执行进行了不同程度的限制,其中包括:

     低耗电模式和应用待机模式: 如果设备未插接电源,处于空闲状态一段时间且屏幕关闭,系统会进入低耗电或者待机模式,并对       应用行为施加相应限制;

    后台位置限制: 对后台应用获取用户当前位置的频率进行限制;

    后台服务限制: 限制应用在后台运行服务,并禁止应用通过隐藏/不可见方式调用 CPU 或网络资源;

   近期新增特性及优化项: (1) 应用待机群组: 限制非活跃应用对设备资源的调用; (2) 后台限制: 当系统检测到应用出现不良行为时,     系统会向用户询问是否要限制该应用在后台访问设备资源; (3) 省电助手功能优化。  

解决思路: Service启动时创建一条通知,与其绑定,这样锁屏或者后台Service都不会被暂停或杀死。

创建一个service类,在onCreate方法里执行如下代码:

    private String notificationId = "serviceid";     private String notificationName = "servicename";     private void showNotification(){         notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);         //创建NotificationChannel         if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){             NotificationChannel channel = new NotificationChannel(notificationId, notificationName, NotificationManager.IMPORTAN                                                                                                     CE_HIGH);             notificationManager.createNotificationChannel(channel);         }         startForeground(1,getNotification());     }     private Notification getNotification() {         Notification.Builder builder = new Notification.Builder(this)                 .setSmallIcon(R.mipmap.ic_launcher)                 .setContentTitle("title")                 .setContentText("text");         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {             builder.setChannelId(notificationId);         }         Notification notification = builder.build();         return notification;     }

注意要加上这个权限:

以上方法就可以使service一直在后台运行了。  



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3