问题
I have created an android app which runs fine in all phones. But in my Alcatel phone it doesn't as the phone goes to a deep sleep mode and the data network fails so the app doesn't get a data network and doesn't sync the data from the server .
My Design ...
SystemBootReceiver --> (DataSyncService)Service --> (MyBroadcastReceiver)BroadcastReceiver --> (MyDataService)Service .
So here on system boot I start DataSyncService where I set up the AlarmManager (repeated) and call the MyBroadcastRecever. After calling the BroadcastRecever I stop DataSyncService by calling stopself() .
Now the MyBroadcastRecever calls the MyDataService.
I came across WakeLocks which as said prevent the phone from going in deep sleep mode.
So I implemented it inside MyDataService onCreate() method
PowerManager pm = (PowerManager)
getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
mWakeLock.acquire();
And release() the wake lock before stopping the service.
I have also set the permission in android Manifest.
But this didn't work. So for a quick check I used WAKE LOCK app from the market .
But this also didn't wake the phone up. Again I came across WAKE MY ANDROID (app removed from store) app from market and installed it .. and a magic happened here.
It kept the phone alive.
As the description in this app says that they have also used a Wake Lock. So what am I missing then ?
Is there an implementation mistake or a design issue ?
回答1:
The lock you have in your service never runs - cause your service is never run
Well - you have to use a WakefulIntentService - make your MyDataService extend WakefulIntentService and in your receiver call WakefulIntentService.doWakefulWork(context, MyDataService.class)
Or implement a static lock shared by both your service and receiver - which would be tricky.
If using wifi you should also need to use a WifiLock - inside your wakeful intent service - can get tricky
来源:https://stackoverflow.com/questions/12417541/android-deep-sleep-and-wake-locks