1

我创建了一个在所有手机上运行良好的安卓应用程序。但在我的阿尔卡特手机中,它没有,因为手机进入深度睡眠模式并且数据网络出现故障,因此应用程序没有获得数据网络,也没有从服务器同步数据。


我的设计 ...

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. 那么我错过了什么?

是否存在实施错误或设计问题?

4

1 回答 1

4

您在服务中拥有的锁永远不会运行 - 因为您的服务永远不会运行

好吧 - 你必须使用WakefulIntentService - 让你的MyDataService扩展WakefulIntentService和你的接收者呼叫WakefulIntentService.doWakefulWork(context, MyDataService.class)

或者实现一个由你的服务和接收者共享的静态锁——这会很棘手。

如果使用 wifi,您还应该使用WifiLock-您的唤醒意图服务中 - 可能会变得棘手

于 2013-04-28T21:47:46.073 回答