我创建了一款在所有手机中运行良好的Android应用程序。但是在我的阿尔卡特手机中它并没有因为手机进入深度睡眠模式而数据网络出现故障,因此应用程序无法获得数据网络,也无法从服务器同步数据。
我的设计......
SystemBootReceiver
- > (DataSyncService)Service
- > (MyBroadcastReceiver)BroadcastReceiver
- > (MyDataService)Service
。
所以在系统启动时,我启动DataSyncService
我设置AlarmManager
(重复)并调用MyBroadcastRecever
。致电BroadcastRecever
后,我致电DataSyncService
停止stopself()
。
现在MyBroadcastRecever
调用MyDataService
。
我遇到了WakeLocks,据说这可以防止手机进入深度睡眠模式。
所以我在MyDataService
onCreate()
方法
PowerManager pm = (PowerManager)
getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
mWakeLock.acquire();
并在停止服务之前release()
唤醒锁定。
我还在android Manifest中设置了权限。
但是这没用。因此,为了快速检查,我使用了市场上的WAKE LOCK应用程序。
但这也没有唤醒手机。我再一次从市场上看到了WAKE MY ANDROID(应用已从商店删除)应用程序并安装了它......这里发生了一次魔术。
它让手机保持活力。
正如此应用中的描述所说他们也使用了Wake Lock
。那么我错过了什么呢?
是否存在实施错误或设计问题?
答案 0 :(得分:4)
您服务中的锁永远不会运行 - 因为您的服务永远不会运行
嗯 - 你必须使用WakefulIntentService - 让MyDataService
延长WakefulIntentService
并在你的接收者电话中WakefulIntentService.doWakefulWork(context, MyDataService.class)
或者实现服务和接收者共享的静态锁 - 这很棘手。
如果使用wifi,你还应该使用WifiLock
- 里面你的觉醒意图服务 - 可能会变得棘手