【问题标题】:Android deep sleep and wake locksAndroid 深度睡眠和唤醒锁
【发布时间】:2015-07-30 15:34:53
【问题描述】:

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


我的设计……

SystemBootReceiver --> (DataSyncService)Service --> (MyBroadcastReceiver)BroadcastReceiver --> (MyDataService)Service .

所以在系统启动时,我启动DataSyncService,在那里我设置AlarmManager(重复)并调用MyBroadcastRecever。调用BroadcastRecever 后,我通过调用stopself() 停止DataSyncService

现在MyBroadcastRecever 调用MyDataService


我遇到了 WakeLocks,据说可以防止手机进入深度睡眠模式。 所以我在MyDataServiceonCreate()方法里面实现了它

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

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

【问题讨论】:

标签: android wakelock android-wake-lock


【解决方案1】:

你的服务中的锁永远不会运行 - 因为你的服务永远不会运行

好吧 - 你必须使用 WakefulIntentService - 让你的 MyDataService 扩展 WakefulIntentService 并在你的接收器中调用 WakefulIntentService.doWakefulWork(context, MyDataService.class)

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

如果使用 wifi,你还应该使用WifiLock - 你的唤醒意图服务 - 可能会很棘手

【讨论】:

  • 我认为提问者表示他们的服务确实运行但存在网络错误。
  • @satur9nine:“但是在我的阿尔卡特手机中,它没有进入深度睡眠模式......” - 请恢复
  • Mr_and_Mrs_D:"但是在我的阿尔卡特手机中它没有,因为手机进入深度睡眠模式并且数据网络下降,因此应用程序没有获得数据网络并且不同步来自服务器的数据。”我认为问题在于“应用没有数据网络”
  • @satur9nine: 不是——即使那样他也需要 wifi 锁——但显然是在 CPU 唤醒之后。请公平竞争
  • 我的投票被 StackOverflow 锁定了,我无法更改它。使用 WifiManager.WifiLock 是一个更有用的建议,但仅当用户在 Wi-Fi 范围内时才有效。
猜你喜欢
  • 1970-01-01
  • 2020-11-19
  • 2012-10-08
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多