Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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/225.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 执行定期后台任务的正确方法_Java_Android_Service_Alarmmanager - Fatal编程技术网

Java 执行定期后台任务的正确方法

Java 执行定期后台任务的正确方法,java,android,service,alarmmanager,Java,Android,Service,Alarmmanager,所以我需要在后台执行定期任务,即使我的应用程序关闭了。我使用AlarmManager创建了我的服务,并在一段时间内重新启动它: public class MyService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i("MyService","On Command!"); stopS

所以我需要在后台执行定期任务,即使我的应用程序关闭了。我使用AlarmManager创建了我的服务,并在一段时间内重新启动它:

public class MyService extends Service
{
    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        Log.i("MyService","On Command!");
         stopSelf();

        return START_NOT_STICKY;

    }
正如你所看到的,我的服务是打算开始时不粘,做他的工作,并立即停止

时间表(仅用于快速测试的1秒,它实际上会导致wakelock):

我的服务将在启动或报警时启动(当前每1秒一次)。然而,我不确定这是否是做我想做的事情的正确方法。我注意到,大多数第三方应用程序都使用粘性服务,并且它们一直驻留在内存中

所以我的问题是,我什么时候应该使用粘性服务

@Override
    public void onDestroy()
    {
        AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);
        alarm.set(

                alarm.RTC_WAKEUP,
                System.currentTimeMillis() + (1000),
                PendingIntent.getService(this, 0, new Intent(this, MyService.class), 0)
        );
    }