bug--service--Caused by java.lang.SecurityException: Unable to start service Intent { }:user 0 is restricted
http://bbs.coloros.com/thread-174655-1-1.html
急!!Service在OPPO系列手机下无法启动,寻求帮助
你好,我是网易邮件事业部1元夺宝开发工程师,最近三个版本发现一个崩溃很怪异,因为97%的奔溃都发生在OPPO机型,而且OPPO机型里85%是R7系列,以下是错误日志,麻烦童鞋们帮忙看看,谢谢! Fatal Exception: java.lang.RuntimeException: An error occured while executing doInBackground() at com.netease.mail.oneduobaohydrid.base.BaseAsyncTask$3.done(BaseAsyncTask.java:95) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1115) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:590) at java.lang.Thread.run(Thread.java:818) Caused by java.lang.SecurityException: Unable to start service Intent { cmp=com.netease.mail.oneduobaohydrid/.service.OneService }: Unable to launch app com.netease.mail.oneduobaohydrid/10057 for service Intent { cmp=com.netease.mail.oneduobaohydrid/.service.OneService }: user 0 is restricted at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1769) at android.app.ContextImpl.startService(ContextImpl.java:1742) at android.content.ContextWrapper.startService(ContextWrapper.java:527) at com.netease.mail.oneduobaohydrid.service.OneService.start(OneService.java:102) at com.netease.mail.oneduobaohydrid.OneApplication.init(OneApplication.java:207) at com.netease.mail.oneduobaohydrid.base.BaseApplication$1.doInBackground(BaseApplication.java:84) at com.netease.mail.oneduobaohydrid.base.BaseApplication$1.doInBackground(BaseApplication.java:75) at com.netease.mail.oneduobaohydrid.base.BaseAsyncTask$2.call(BaseAsyncTask.java:83) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1115) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:590) at java.lang.Thread.run(Thread.java:818)
你好,我们工程师看了一下,提出了一些问题:
OPPO手机内置有耗电管理的功能,可能该应用服务在后台启动时被判断为耗电的一种操作行为;
但是根据你的上面提交的资料,这个问题没有详细完整的Log或复现路径,不知道该应用是被OPPO手机内的耗电管理判断是哪种类型耗电,所以暂时无法提供方法。
理论上如果该应用服务是合理地使用就不会被判断耗电。
所以希望有完整的log以及复现路径提供给我们。
另一种方法是,你们可以尝试自己在启动服务时捕获异常,不上报,因为OPPO手机内对耗电管理的限制对他们的正常使用没有影响。
请问跟 APP 使用了 multi-dex 有关系么?
你们的 rom,启用了 ART 虚拟机么?
解决方法:
@ALL ,不好意思让大家久等了。
经过和OPPO工程师沟通,这个问题的原因是OPPO手机自动熄屏一段时间后,会启用系统自带的电量优化管理,禁止一切自启动的APP(用户设置的自启动白名单除外)。
所以,类似的崩溃常常集中在用户休息之后的夜里或者凌晨,但是并不影响用户平时的正常使用。
至于会出现user 0 is restricted,我觉得是coloros系统电量优化管理做得不好的地方。
对coloros官方的处理建议:既然禁止自启动,那么干脆直接force stop对应的进程,而不是抛出RuntimeException来让开发者买单。
对开发者处理建议:在服务启动的地方进行try catch防止崩溃即可(也是“1元夺宝”APP目前的处理方式)