我很困惑是否要获取这个唤醒锁。例如。我有这种类型的代码,是从onReceive()
of a BroadcastReceiever
(CONNECTIVITY_CHANGE、BOOT_COMPLETED 等)异步地即我正在启动一个IntentService
from onReceive()
执行繁重的工作。
private static void insertInDatabase(Context context /*, some data to be inserted in database*/) {
Database helper = Database.getInstance(context);
PowerManager pm = (PowerManager) context
.getSystemService(Context.POWER_SERVICE);
final WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, wakelockName);
wakeLock.acquire();
try {
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues cv = new ContentValues();
// insert data in database here
} finally {
wakeLock.release();
}
}
这种情况是否适合购买PowerManager.PARTIAL_WAKE_LOCK
?
@paha 的回答忽略了重要的一点:IntentService 还不够。之间onReceive()
结束并且 IntentService 启动后,手机可能会再次进入睡眠状态。您需要一个(静态)锁来弥补这个差距 - 这是在 Mark Murpphy 中实现的WakefulIntentService https://github.com/commonsguy/cwac-wakeful
因此,保留 AlarmManager 和接收器,但启动一个WakefulIntentService
从你的onReceive()
.
See:
- Android 深度睡眠和唤醒锁 https://stackoverflow.com/questions/12417541/android-deep-sleep-and-wake-locks/16268293#16268293
- PowerManager 唤醒锁无法将设备从服务中唤醒 https://stackoverflow.com/questions/17471028/powermanager-wakelock-not-waking-device-up-from-service/17496029#17496029
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)