如何运行后5秒后无法在Android 5.1中运行后台服务?

Mon*_*tel 3 android

我需要每5秒调用一次后台服务,但我在Android 5.1(Lollipop)中遇到问题:它会自动将间隔时间视为1分钟.

请帮我每5秒运行一次后台服务.

use*_*156 5

由于Android 5.1上的警报最小间隔为一分钟,因此您可以调整服务以每5秒重复一次作业:

public class MyService extends Service {
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public void onCreate() {
        super.onCreate();
    }
    @Override
    public void onDestroy(){
        super.onDestroy();
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                startJob();
            }
        });
        t.start();
        return START_STICKY;
    }
    private void startJob(){
        //do job here

        //job completed. Rest for 5 second before doing another one
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        //do job again
        startJob();
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码确保在执行另一个作业之前完成一个作业,因此它更简洁.但是,如果您的要求不需要在执行另一个作业之前确保完成一个作业,则可以使用以下代码:

public class MyService extends Service {
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public void onDestroy(){
        super.onDestroy();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    startJob();
                    Thread.sleep(5000);
                }

            }
        });
        t.start();
        return START_STICKY;
    }
    private void startJob(){
        //do job here
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,您可以通过调用startService()来启动服务; 来自您的活动主题.这样,您就绕过了AlarmManager限制.希望能帮助到你...