2012-09-14 129 views
1

我创建了一款在所有手机中运行良好的Android应用程序。但在我的阿尔卡特手机中,手机并未进入深度睡眠模式,数据网络出现故障,因此应用程序无法获取数据网络,也无法同步服务器中的数据。Android深度睡眠和唤醒锁


我的设计...

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应用程序。

但是这也没有唤醒电话。我再次遇到了从市场上唤醒我的ANDROID(应用程序从商店中删除)应用程序,并安装了它。这里发生了一个奇迹。

它使手机保持活着。

正如本应用程序中的说明所述,他们也使用了Wake Lock。那么我错过了什么?

是否存在执行错误或设计问题?

+0

也许,你可以尝试[ACQUIRE_CAUSES_WAKEUP](http://developer.android.com/reference /android/os/PowerManager.html#ACQUIRE_CAUSES_WAKEUP)国旗与SCREEN_DIM_WAKE_LOCK –

+0

你能澄清你的问题吗?问题是,唤醒设备后应用程序运行时,网络请求会失败? – satur9nine

+0

你解决了你的问题吗? –

回答

3

你在你的服务有锁从不运行 - 使您服务永远不会运行

嗯 - 你必须使用一个WakefulIntentService - 让你的MyDataService延长WakefulIntentService并在接收器的呼叫WakefulIntentService.doWakefulWork(context, MyDataService.class)

或实施一个由你的服务和接收者共享的静态锁 - 这将是棘手的。

如果使用Wi-Fi,你也应该需要使用WifiLock - 你清醒的意图服务 - 可以变得棘手

+0

我认为提问者表示他们的服务确实运行但存在网络错误。 – satur9nine

+0

@ satur9nine:“但在我的阿尔卡特手机中,它并不像手机进入深度睡眠模式......” - 请回复 –

+0

Mr_and_Mrs_D:“但是在我的阿尔卡特手机中,它并没有像手机进入深度睡眠模式和数据网络下降,所以应用程序不会获得数据网络,也不会同步来自服务器的数据。“我看到问题是“应用程序没有获得数据网络” – satur9nine