Android 程序后台运行和锁屏运行 |
您所在的位置:网站首页 › 安卓锁屏关闭应用程序设置 › Android 程序后台运行和锁屏运行 |
Android 后台服务保活
需求方案
推广一下我的个人博客小站:
Z同学 期待大家的围观
需求
1.在华为手机中应用切换到后台后,打开其他app。需要我的应用后台仍然能够访问http,传输数据。 2.息屏后服务没有退出的话,需要继续后台运行,并进行网络数据的传输和请求 方案1.添加应用到白名单中。代码如下: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { try { String pn= getPackageName(); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); if (!pm.isIgnoringBatteryOptimizations(pn)) { Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:" + pn)); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_CODE); } } } catch (Exception e) { e.printStackTrace(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE) { if (resultCode == RESULT_CANCELED) { Toast.makeText(this, "用户不允许程序后台运行~", Toast.LENGTH_LONG).show(); } } }这个方案是将项目添加到系统白名单中,实现不进行电池优化,解决后台运行的问题。 结果:失败,在vivo手机低版本中能够通过,但是华为就不行了 2.创建前台服务,startForegroundService()来允许服务后台一直运行。 结果:失败,服务是存活了,切换到后台后,也不会被清理,通过状态栏上可以看到Notification的存活。 但是线程被停止了,网络请求被关闭了。整个Service被系统执行了暂停。 解决方案: 参考了音乐播放器,实现了长时间常驻和回收问题。 1.创建startForegroundService()服务,启动一个前台服务,这个只是告诉你启动服务,而不代表你的服务一直是前台服务。 2.在service中创建线程,循环执行notification的刷新。你可以不改变notification的信息,执行statForeground()方法。不断的刷新 系统会将你的应用判断为正在与桌面activity进行交互的进程。从而保证你的service的存活,你的所有网络请求和后台操作都会存活。(实测有效) 3.如果不喜欢notification 可以尝试浮动框。也是在service中调用线程循环刷新浮动框(未实测,但预估有效) 上面的方法能够实现应用被切换到后台后,也一直在运行。 最后一步, 创建一个普通的Service,在你的应用启动的时候创建它,应用退出的时候销毁它。 在service中监听亮屏和息屏操作 IntentFilter screenStatusIF = new IntentFilter(); screenStatusIF.addAction(Intent.ACTION_SCREEN_ON); screenStatusIF.addAction(Intent.ACTION_SCREEN_OFF); // 注册 registerReceiver(receiver, screenStatusIF);然后在监听亮屏和息屏的时候 直接进行音视频的播放。 播放无声音音频文档。进行循环不断的播放。 自测可以和网易云音乐同样处于后台播放模式,服务都能一直稳定并进行发送网络。 由于项目原因就不提供代码了。代码比较简单 ,主要是想法和思路。 上面的方案执行后自测华为荣耀v10锁屏后运行30分钟,没有问题。 不用客户主动在电池权限中开启后台运行。就能保证服务稳定。 注意:如果非得追求客户无感的模式下,进行后台服务常驻,那应该算是非常流氓的行为了。或者你的app有微信的那么大的脸,让厂家将你的app添加到厂商版后台运行白名单。 否则给客户一个任务栏又有何妨。百度,网易云音乐等应用都是通过类似方式来实现后台运行。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |