我建立了一个简单的Android应用程序来解决一个烦人的问题。每当你加入我的大学的无线网络时,你都会被重定向到一个登录页面,在那里你必须提供你的学号和密码。
我建立了一个Android应用程序,让你输入你的详细信息,然后一个服务注册了一个带有意图过滤器WifiManager.NETWORK_STATE_CHANGED_ACTION的接收器。 每当设备连接到大学网络时,就会进行HTTP post webrequest并使用登录详细信息。从而解决了被重定向的问题。
一切都工作得很完美... 但是在我的扩展测试中,我发现一个非常奇怪的问题。当我按下“Go Power Master”应用程序的闪电按钮一次,然后打开设置>应用程序>运行时,我会看到我的服务正在重新启动(连同Facebook等许多其他服务)。大约30秒后,服务重新启动,一切又恢复正常。
然而,如果我快速地按下闪电按钮多次(3次或更多次),然后进入设置>应用程序>运行时,我不再看到我的服务了。就像它从未尝试重新启动过一样。Facebook服务和其他服务经历了正常的重新启动阶段,最终成功。
有人知道发生了什么吗?为什么当我多次按下闪电按钮时,我的服务永远死亡?
我建立了一个Android应用程序,让你输入你的详细信息,然后一个服务注册了一个带有意图过滤器WifiManager.NETWORK_STATE_CHANGED_ACTION的接收器。 每当设备连接到大学网络时,就会进行HTTP post webrequest并使用登录详细信息。从而解决了被重定向的问题。
一切都工作得很完美... 但是在我的扩展测试中,我发现一个非常奇怪的问题。当我按下“Go Power Master”应用程序的闪电按钮一次,然后打开设置>应用程序>运行时,我会看到我的服务正在重新启动(连同Facebook等许多其他服务)。大约30秒后,服务重新启动,一切又恢复正常。
然而,如果我快速地按下闪电按钮多次(3次或更多次),然后进入设置>应用程序>运行时,我不再看到我的服务了。就像它从未尝试重新启动过一样。Facebook服务和其他服务经历了正常的重新启动阶段,最终成功。
有人知道发生了什么吗?为什么当我多次按下闪电按钮时,我的服务永远死亡?
在你回答之前,请知道我已经将我的应用程序更改为使用startForeground()
,并且在我所有的扩展测试中都能正常工作。然而,这不是一个有效的解决方案,因为我不希望我的应用程序在状态栏中有一个持续的通知。
P.S. 如果您想重新创建此奇怪的问题,我的项目已上传到github https://github.com/ccoffey/NUIMWiFi
P.P.S. "Go Power Master" 应用程序是Google Play上的免费应用程序,闪电按钮应该可以恢复丢失的RAM?我猜它会强制所有后台服务停止。无论如何,它似乎确实是这样做的。
编辑以包含LogCat日志
好的,我已经部分回答了自己的问题。下面是仅包括 ie.cathalcoffey.android 的 Service 的 LogCat 输出结果。我已经突出显示了重要的行。结果发现,每次你杀死一个 Service ,它的重启时间都会增加。最初是 135096 毫秒,第二次杀死 Service 后变成了 540384 毫秒,最后一次杀死 Service 后变成了 2161536 毫秒。
现在我知道为什么我的服务在快速连续被杀死后似乎无法重新启动。但我仍然不知道为什么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