我已经构建了一个简单的Android应用程序来解决烦人的问题。每当您加入我大学的无线网络时,您都会被重定向到登录页面,您必须在该页面上提供您的学号和密码。
我已经构建了一个Android应用程序,可以让您输入详细信息,然后服务会使用意图过滤器WifiManager.NETWORK_STATE_CHANGED_ACTION
注册接收器。
每当设备连接到大学网络时,都会使用登录详细信息进行HTTP post webrequest。从而解决了被重定向的问题。
一切都很完美......但是在我的扩展测试中,我发现了一个非常奇怪的问题。当我按下“Go Power Master”应用程序闪电按钮一次然后打开设置>应用程序>运行我看到我的服务正在重启(以及许多其他服务,例如Facebook)。大约30秒后服务重新启动,一切都很好。
但是,如果我连续多次按下闪电按钮(3次或更多次),然后转到设置>应用>运行我不再看到我的服务。就像它从未尝试过重启一样。 Facebook服务和其他服务通过正常重启阶段并最终成功。
有谁知道发生了什么事?当我多次按下闪电按钮时,为什么我的服务会永远消失?
在您回答之前我知道我已将我的应用程序更改为使用startForeground()
,这在我的所有扩展测试中都非常有效。但这不是一个有效的解决方案,因为我不希望我的应用程序在状态栏中有持续的通知。
P.S。如果您想重新创建这个奇怪的问题https://github.com/ccoffey/NUIMWiFi
,我的项目就在github上了P.P.S。 “Go Power Master”应用程序是Google Play上的免费应用程序,闪电按钮应该用于回收丢失的RAM?我猜它会迫使所有后台服务都死掉。无论如何,这肯定是它所做的。
已修改为包含LogCat日志
好的,我已经部分回答了我自己的问题。以下是我的服务的LogCat输出过滤到仅包括ie.cathalcoffey.android。我强调了重要的线条。事实证明,每次杀死服务时,其重启时间都会增加。最初它是135096ms,第二次我杀了服务它变成540384ms,最后一次我杀了服务它变成2161536ms。
所以现在我知道为什么我的服务在快速连续多次被杀后似乎没有重启。我仍然不知道为什么Facebook服务每次被杀都会很快重启(没有增加重启时间)。关于如何解决这个问题的任何想法?
05-08 09:52:20.997: I/ActivityManager(192): START
{act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]
flg=0x10000000 cmp=ie.cathalcoffey.android/.MyActivity} from pid 3364 05-08
09:52:21.403: I/ActivityManager(192): Displayed
ie.cathalcoffey.android/.MyActivity: +290ms (total +41s557ms) 05-08
09:53:01.888: I/ActivityManager(192): Killing proc
3330:ie.cathalcoffey.android/10033: kill background 05-08 09:53:01.888:
W/ActivityManager(192): Scheduling restart of crashed service
ie.cathalcoffey.android/.MyService in 135096ms 05-08 09:55:17.013:
I/ActivityManager(192): Start proc ie.cathalcoffey.android for service
ie.cathalcoffey.android/.MyService: pid=3633 uid=10033 gids={3003} 05-08
09:56:21.325: I/ActivityManager(192): Killing proc
3633:ie.cathalcoffey.android/10033: kill background 05-08 09:56:21.333:
W/ActivityManager(192): Scheduling restart of crashed service
ie.cathalcoffey.android/.MyService in 540384ms 05-08 10:05:21.747:
I/ActivityManager(192): Start proc ie.cathalcoffey.android for service
ie.cathalcoffey.android/.MyService: pid=3943 uid=10033 gids={3003} 05-08
10:17:20.786: I/ActivityManager(192): Killing proc
3943:ie.cathalcoffey.android/10033: kill background 05-08 10:17:20.786:
W/ActivityManager(192): Scheduling restart of crashed service
ie.cathalcoffey.android/.MyService in 2161536ms
好的,所以用facebook过滤LogCat会返回以下有趣的信息,有趣的内容再次以粗体显示。他们是怎么做到的?如何将此禁止逻辑合并到我的服务中。
05-08 10:47:15.896: I/ActivityManager(192): Killing proc
4530:com.facebook.katana/10077: kill background 05-08 10:47:15.896:
W/ActivityManager(192): Scheduling restart of crashed service
com.facebook.katana/.service.MediaUploadService in 24955ms 05-08
10:47:16.552: W/ActivityManager(192): Permission Denial: Accessing service
ComponentInfo{com.facebook.katana/com.facebook.katana.service.MediaUploadService } from pid=907, uid=10069 that is not exported from uid 10077 05-08 10:47:16.560: W/System.err(907): java.lang.SecurityException: Not allowed to stop service Intent { cmp=com.facebook.katana/.service.MediaUploadService } 05-08 10:47:17.263: W/System.err(907): java.lang.SecurityException: Not allowed to stop service Intent { cmp=com.facebook.katana/.service.MediaUploadService } 05-08 10:47:17.263: W/ActivityManager(192): Permission Denial: Accessing service ComponentInfo{com.facebook.katana/com.facebook.katana.service.MediaUploadService} from pid=907, uid=10069 that is not exported from uid 10077 05-08 10:47:17.778: W/System.err(907): java.lang.SecurityException: Not allowed to stop service Intent { cmp=com.facebook.katana/.service.MediaUploadService } 05-08 10:47:17.778: W/ActivityManager(192): Permission Denial: Accessing service ComponentInfo{com.facebook.katana/com.facebook.katana.service.MediaUploadService} from pid=907, uid=10069 that is not exported from uid 10077
答案 0 :(得分:5)
解决方案是在AndroidManifest.xml
中将exported =“false”添加到服务中