簡體   English   中英

如何運行后5秒后無法在Android 5.1中運行后台服務?

[英]How to run background service after every 5 sec not working in android 5.1?

我需要每5秒調用一次后台服務,但我在Android 5.1(Lollipop)中遇到問題:它會自動將間隔時間視為1分鍾。

請幫我每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();
    }
}

上面的代碼確保在執行另一個作業之前完成一個作業,因此它更簡潔。 但是,如果您的要求不需要在執行其他作業之前確保完成一個作業,則可以使用以下代碼:

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
    }
}

最后,您可以通過調用startService()來啟動服務; 來自您的活動主題。 這樣,您就繞過了AlarmManager限制。 希望能幫助到你...

在Android 5.1中,它們似乎設置了一個限制,其中低輪詢周期被四舍五入到60000毫秒(一分鍾)。 單獨留下高於60000ms的重復間隔。

對於計時操作(滴答,超時等),使用Handler更容易,也更有效。

因此,如果你想實現你的目標,你必須使用處理程序在Android 5.1中執行此操作。

請參閱此鏈接https://developer.android.com/reference/android/app/AlarmManager.html#setRepeating(int,long,long,android.app.PendingIntent)

我沒有看到問題

要么讓服務一直運行,讓它等待5秒鍾b4正在處理新任務

或者你每隔一分鍾開始一個線程,它每隔5秒執行你想要的任務......並在一分鍾后停下來或許只是殺死,初始化它並立即啟動它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM