Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:在alarmmanager触发的服务中使用wakelock_Java_Android_Service_Alarmmanager_Wakelock - Fatal编程技术网

Java Android:在alarmmanager触发的服务中使用wakelock

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

在我的应用程序中,我有一个警报,它会触发一个从互联网下载信息并显示通知的服务

以下是我的代码的简化版本:

MyActivity包含以下内容:

            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库。自述文件包含所有设置步骤。您可能不需要源代码就可以开始了。