Java Android:在alarmmanager触发的服务中使用wakelock
在我的应用程序中,我有一个警报,它会触发一个从互联网下载信息并显示通知的服务 以下是我的代码的简化版本: MyActivity包含以下内容:Java Android:在alarmmanager触发的服务中使用wakelock,java,android,service,alarmmanager,wakelock,Java,Android,Service,Alarmmanager,Wakelock,在我的应用程序中,我有一个警报,它会触发一个从互联网下载信息并显示通知的服务 以下是我的代码的简化版本: MyActivity包含以下内容: Calendar cal = Calendar.getInstance(); cal.add(Calendar.SECOND, 20); Intent intent = new Intent(this, AlarmService.class); PendingI
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 20);
Intent intent = new Intent(this, AlarmService.class);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 20000, pendingIntent);
AlarmService如下所示:
public class AlarmService extends Service {
@Override
public void onCreate() {
new myAsyncTask().execute();
}
private class myAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... args) {
//Download stuff
return null;
}
@Override
protected void onPostExecute(Void arg) {
//Show notification
}
}
}
公共类AlarmService扩展服务{
@凌驾
public void onCreate(){
新建myAsyncTask().execute();
}
私有类myAsyncTask扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(Void…args){
//下载资料
返回null;
}
@凌驾
受保护的void onPostExecute(void arg){
//显示通知
}
}
}
我真的不明白什么时候应该使用唤醒锁,所以我的问题是:在这种情况下,我应该使用唤醒锁吗?如果是,我应该从哪里开始和停止它
提前感谢是的,您需要使用
唤醒锁
来确保您的服务能够完成其工作
如果使用符合您的设计要求,我会看一看。它代表您管理报警和唤醒锁,并且易于设置。当警报触发时,WakeLock
被获取,而WakefulIntentService
库负责在服务完成时释放它
如果你这样做,你就不想使用AsyncTask——你需要让服务保持活跃状态(在它的
doWakefulWork()
方法中),以便保存WakeLock
谢谢,我到底应该下载哪个文件?GitHub链接的“下载”部分提供了一个.jar库。自述文件包含所有设置步骤。您可能不需要源代码就可以开始了。