2020年了,Android后台保活还有戏吗?看我如何优雅的实现!腾讯云开发者社区

总之,Android应用的后台保活在某些场景下,还是有持续的需求。除了之前那些耳熟能详的保活黑科技以外,在Android9.0(甚至Android10)时代,我们还有哪些保活方法可以用?那么,请跟着本文作者的思路,看看更优雅的后台保活实现方法吧。

网名NanBox:毕业于华中科技大学,现为"悦跑圈APP”高级Android开发工程师。主要负责公司Android项目,核心模块的开发。涉及GPS定位、地图、图片编辑等功能。独立开发了手表应用项目。在项目中应入了Flutter跨平台开发技术,实现了原生和Flutter的混合开发。

如果你想详细了解目前Android平台上后台保活技术的挑战,请阅读:

系统这种做法本身出发点是好的,因为可以节省内存,降低功耗,也避免了一些流氓行为。

但有一部分应用,应用本身的使用场景就需要在后台运行,用户也是愿意让它在后台运行的,比如跑步类应用、一些懒得对接厂商推送通道的IM应用、消息推送资讯类应用等。

一方面流氓软件用各种流氓手段进行保活,另一方面系统加大杀后台的力度,导致我们一些真正需要在后台运行的应用被误杀,苦不堪言。

这些做法可以说是很流氓了,甚至破坏了Android的生态,好在随着Android系统版本的更新,这些非常规的保活手段很多都已失效了。

对于那些确实需要在后台运行的应用,我们如何做到优雅的保活呢?

通常会看到下面这两位:

下次被产品说「XXX都可以保活,为什么我们不行!」的时候,你就知道怎么怼回去了。大厂通过和手机厂商的合作,将自己的应用默认加入到白名单中。如果你在一个能谈成这种合作的大厂,也就不用往下看了。

好在系统还没有抛弃我们,允许我们申请把应用加入白名单。

首先,在AndroidManifest.xml文件中配置一下权限:

可以通过以下方法,判断我们的应用是否在白名单中:

@RequiresApi(api=Build.VERSION_CODES.M)privatebooleanisIgnoringBatteryOptimizations(){booleanisIgnoring=false;PowerManagerpowerManager=(PowerManager)getSystemService(Context.POWER_SERVICE);if(powerManager!=null){isIgnoring=powerManager.isIgnoringBatteryOptimizations(getPackageName());}returnisIgnoring;}

如果不在白名单中,可以通过以下代码申请加入白名单:

@RequiresApi(api=Build.VERSION_CODES.M)publicvoidrequestIgnoreBatteryOptimizations(){try{Intentintent=newIntent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);intent.setData(Uri.parse("package:"+getPackageName()));startActivity(intent);}catch(Exceptione){e.printStackTrace();}}

申请时,应用上会出现这样一个窗口:

Android开发的一个难点在于,各大手机厂商对原生系统进行了不同的定制,导致我们需要进行不同的适配,后台管理就是一个很好的体现。几乎各个厂商都有自己的后台管理,就算应用加入了后台运行白名单,仍然可能会被厂商自己的后台管理干掉。

如果能把应用加入厂商系统的后台管理白名单,可以进一步降低进程被杀的概率。不同的厂商在不同的地方进行设置,一般是在各自的「手机管家」,但更难的是,就算同一个厂商的系统,不同的版本也可能是在不同地方设置。

首先我们可以定义这样两个方法:

/***跳转到指定应用的首页*/privatevoidshowActivity(@NonNullStringpackageName){Intentintent=getPackageManager().getLaunchIntentForPackage(packageName);startActivity(intent);}/***跳转到指定应用的指定页面*/privatevoidshowActivity(@NonNullStringpackageName,@NonNullStringactivityDir){Intentintent=newIntent();intent.setComponent(newComponentName(packageName,activityDir));intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);}

以下是部分手机的厂商判断,跳转方法及对应设置步骤,跳转方法不保证在所有版本上都能成功跳转,都需要加trycatch。

厂商判断:

publicbooleanisHuawei(){if(Build.BRAND==null){returnfalse;}else{returnBuild.BRAND.toLowerCase().equals("huawei")||Build.BRAND.toLowerCase().equals("honor");}}

跳转华为手机管家的启动管理页:

privatevoidgoHuaweiSetting(){try{showActivity("com.huawei.systemmanager","com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity");}catch(Exceptione){showActivity("com.huawei.systemmanager","com.huawei.systemmanager.optimize.bootstart.BootStartActivity");}}

操作步骤:应用启动管理->关闭应用开关->打开允许自启动。

publicstaticbooleanisXiaomi(){returnBuild.BRAND!=null&&Build.BRAND.toLowerCase().equals("xiaomi");}

跳转小米安全中心的自启动管理页面:

privatevoidgoXiaomiSetting(){showActivity("com.miui.securitycenter","com.miui.permcenter.autostart.AutoStartManagementActivity");}

publicstaticbooleanisOPPO(){returnBuild.BRAND!=null&&Build.BRAND.toLowerCase().equals("oppo");}

跳转OPPO手机管家:

privatevoidgoOPPOSetting(){try{showActivity("com.coloros.phonemanager");}catch(Exceptione1){try{showActivity("com.oppo.safe");}catch(Exceptione2){try{showActivity("com.coloros.oppoguardelf");}catch(Exceptione3){showActivity("com.coloros.safecenter");}}}}

操作步骤:权限隐私->自启动管理->允许应用自启动。

publicstaticbooleanisVIVO(){returnBuild.BRAND!=null&&Build.BRAND.toLowerCase().equals("vivo");}

跳转VIVO手机管家:

privatevoidgoVIVOSetting(){showActivity("com.iqoo.secure");}

操作步骤:权限管理->自启动->允许应用自启动。

publicstaticbooleanisMeizu(){returnBuild.BRAND!=null&&Build.BRAND.toLowerCase().equals("meizu");}

跳转魅族手机管家:

privatevoidgoMeizuSetting(){showActivity("com.meizu.safe");}

操作步骤:权限管理->后台管理->点击应用->允许后台运行。

publicstaticbooleanisSamsung(){returnBuild.BRAND!=null&&Build.BRAND.toLowerCase().equals("samsung");}

跳转三星智能管理器:

privatevoidgoSamsungSetting(){try{showActivity("com.samsung.android.sm_cn");}catch(Exceptione){showActivity("com.samsung.android.sm");}}

操作步骤:自动运行应用程序->打开应用开关->电池管理->未监视的应用程序->添加应用。

publicstaticbooleanisLeTV(){returnBuild.BRAND!=null&&Build.BRAND.toLowerCase().equals("letv");}

跳转乐视手机管家:

privatevoidgoLetvSetting(){showActivity("com.letv.android.letvsafe","com.letv.android.letvsafe.AutobootManageActivity");}

操作步骤:自启动管理->允许应用自启动。

publicstaticbooleanisSmartisan(){returnBuild.BRAND!=null&&Build.BRAND.toLowerCase().equals("smartisan");}

跳转手机管理:

privatevoidgoSmartisanSetting(){showActivity("com.smartisanos.security");}

操作步骤:权限管理->自启动权限管理->点击应用->允许被系统启动。

在之前做的跑步应用中,我在设置里增加了一个权限设置页面,将上面提到的设置放在这里面。

最近发现友商某咚也跟进了,图1是我们做的,图2是某咚做的:

某咚从设计、从我写的不够好的文案,甚至是我从十几台手机上一张一张截下来的图,进行了全方位的致敬。感谢某咚的认可,但最近在某个发布会上听到这么一句话:在致敬的同时,能不能说一句谢谢?

THE END
1.华为mate20后台运行设置在哪里1、华为Mate20台运行操作如下: 如果打开了屏幕外物理导航键 :向左或者向右滑动导航键,即可出现后台运行的应用。 2、如果开启了屏幕内虚拟导航栏:点击虚拟栏方框按钮,即可出现后台运行的应用。 3、在开发人员选项里可以看到一项“正在运行的服务”,点击进去就能看到目前所有后台运行的应用程序了 本文标题:华为mate20http://m.da39.com/shenghuo2458057.html
2.2将华为运动降App设置为后台运行以华为手机为例:在手机设置里搜索应用管理,找到运动健康>权限>健身运动>允许。(HarmonyOS NEXT版本华为手机不涉及,请跳过此步骤) 2 将华为运动健康App设置为后台运行 请将华为运动健康App设置为后台运行,如果处于关闭状态,手机重启之后华为运动健康App不会启动,只有打开华为运动健康App之后,才可以正常计步。 https://consumer-tkb.huawei.com/weknow/servlet/show/webKnowContextServlet?knowId=zh-cn01057329
3.华为mate20后台运行设置在哪里1、华为Mate20台运行操作如下: 如果打开了屏幕外物理导航键 :向左或者向右滑动导航键,即可出现后台运行的应用。 2、如果开启了屏幕内虚拟导航栏:点击虚拟栏方框按钮,即可出现后台运行的应用。 3、在开发人员选项里可以看到一项“正在运行的服务”,点击进去就能看到目前所有后台运行的应用程序了 更多精彩资讯请关注七彩http://m.qicaisi.com/bk-3459455.shtml
4.[日常]华为手机允许APP应用后台保持运行,并显示通知[日常]华为手机允许APP应用后台保持运行,并显示通知 当有一个重要的APP应用需要及时收到消息通知时 可以这样操作 确认锁屏保持网络连接的开关已打开 方法:进入设置>电池>更多电池设置,打开休眠时始终保持网络连接开关 确认手机管家中APP已开启手动管理 方法:进入手机管家>应用启动管理,找到APP应用,关闭“自动管理”,打开https://blog.51cto.com/15274085/4936805
5.华为手机私有App后台保活编程语言针对华为meta30 android10以上版本和华为p40 HarmonyOS 4.2.0 我开发了一个私有app,该app不上互联网,在用户局域网运行部署,该应用不上架应用市场,希望手机息屏后该App可以后台运行保活,提供详细对应事例代码和具体操作步骤!写回答 好问题 提建议 追加酬金 关注问题 分享 邀请回答 https://ask.csdn.net/questions/8144814
6.华为手机v2rayng在后台运行,放置一段时间后,通过v2rayng联网的遇到问题: 在后台运行,放置(期间不点开需要通过v2rayng联网的app,或者手机息屏一段时间)一段时间后,通过v2rayng联网的app会无法上网。 在v2rayng内点击下方测试栏,提示连接成功,有延迟。 使用通过v2rayng联网的浏览器进google.com时提示找不到 dns,无法上网。 其他https://github.com/2dust/v2rayNG/issues/2552
7.后台管理界面2、OPPO手机打开显示后台运行怎么回事? 3、华硕路由器怎么进入管理员? 4、手机后台是什么? 5、电脑怎么退出界面保留后台? 1、后台管理界面,华为怎么把app放到主屏幕上? 方法/步骤: 1.第一我们在华为手机上左右的滑动屏幕,找到华为手机的“应用商店”的图标。 http://www.wangguangwei.com/24917.html
8.怎么设置可以让华为运动降APP后台运行?怎么设置可以让华为运动健康APP后台运行? 以前用小米手环,可以设置APP一直后台运行,现在换华为手环,运动健康APP怎么设置可以一直后台运行?在手机设置里找了好多次,找不到地方可以设置。 | 来自:OnePlus6T |https://bbs.oneplus.com/thread/6161775
9.华为手机怎么开启永久位置及后台运行权限?看到那个省流量模式,点击关闭,因为一旦开启流量模式时,应用就会断开网络,无法保证后台运行。https://ask.zol.com.cn/x/15476521.html
10.华为手机后台运行的设置方法1、首先打开手机设置,进入设置界面点击电池选项; 2、进入到电池界面后点击耗电排行; 3、然后就可以看到每个应用的耗电量; 4、选择你要保护的后台软件; 5、将自动管理这栏点击取消 6、然后选择最下面的“允许后台活动”让其开启,这样就可以让app在锁屏以后继续运行了。 https://www.jianshu.com/p/a5a73a3971ad
11.华为手机后台运行的设置方法1、首先打开手机设置,进入设置界面点击电池选项; 2、进入到电池界面后点击耗电排行; 3、然后就可以看到每个应用的耗电量; 4、选择你要保护的后台软件; 5、将自动管理这栏点击取消 6、然后选择最下面的“允许后台活动”让其开启,这样就可以让app在锁屏以后继续运行了。 https://www.meipian.cn/4w4xehre
12.荣耀手机/平板应用后台运行一段时间再次进入时会重新启动荣耀手机/平板应用后台运行一段时间再次进入时会重新启动 问题现象 应用切换后台,过段时间,再次进入时应用会重新加载启动,有时还需要重新登录账号密码。 问题原因 出于节省电量、节省流量的考虑,应用放置在后台一段时间后,系统会将其自动关闭。 当系统资源不足,会触发https://www.hihonor.com/cn/support/content/zh-cn00406916/
13.华为手机卡顿?教你一招关闭APP自启动,手机瞬间变流畅!很多华为手机用户都遇到过手机越用越卡的情况,这很可能是因为一些APP在后台偷偷自启动,占用系统资源导致的。别担心,今天我们就来教你一招,轻松解决这个问题! 为什么关闭APP自启动很重要? * 提升手机运行速度: 关闭不必要的自启动APP,可以减少系统启动时加载的应用数量,从而提升手机的运行速度。 https://www.chinafix.com/article-41371-1.html
14.华为手机如何设置应用后台运行有时候我们在使用手机的时候希望有些应用能够在后台运行,但不知如何设置,下面小编教大家一种方法。 方法一 01 首先,打开华为手机的桌面上自带的的“手机管家”如图所示。 02 打开手机管家后,右上角有一个设置的图像,如图中红框内所示,将其打开。 03 https://www.coozhi.com/youxishuma/shouji/113797.html
15.华为手机应用闪退怎么回事?有哪些解决方法?手机维修网解决方法:不使用某个程序时要真正退出而不是返回到桌面,经常清理后台运行软件,在权限管理中禁止自启动不常用的应用,另外几乎没用过的软件就卸载了吧。如果有需要,可以对手机进行root后删掉一些自带应用,或禁止后台一些应用自启动。 3、运行内存不足 华为手机的运行程序过多会致使内存不足,从而造成APP闪退。 https://service.iccidchaxun.com/info/12095.html
16.Android后台运行白名单实现保活应用后台保活华为云帮助中心为你分享云计算行业信息,包含产品介绍、用户指南、开发指南、最佳实践和常见问题等文档,方便快速查找定位问题与能力成长,并提供相关资料和解决方案。本页面关键词:Android后台运行白名单实现保活。https://support.huaweicloud.com/topic/1161888-1-A