2017-05-13 66 views
0

我有一個類從我的服務器獲取通知我不使用firebase雲消息傳遞,所以我正在使用intentservice類獲取數據。但我想檢查每60秒的通知但定時器不工作定時器在Android意圖服務

protected void onHandleIntent(Intent intent) { 

它啓動正常,當我啓動應用程序,但之後,它沒有及時檢查。

有沒有辦法在後臺每隔60秒檢查通知?

注:我不使用GCM火力點,我永遠不會使用它

回答

1

IntentService開始,當你把它的意圖服務,運行任何你定義爲意圖,然後結束服務。如果你打算讓定時器運行,那麼也許在服務之外進行。也許你可以使用Handler併發布延遲的可運行的意圖,但我必須強烈建議從長遠來看,因爲使用手機收音機進行60秒的檢查會快速耗盡電池。 GCM的Firebase旨在處理該問題,因爲它會「批量」處理網絡請求,如果您不想這樣做,則可能使用JobScheduler。 Android很好地和高效地管理手機的收音機,所以除非60秒是絕對必要的,否則這樣做並不可取。用戶可能會抱怨電池電量不足。

在該處理的事情:

private static Handler handler = new Handler(Looper.getMainLooper); 

在您的活動,然後

private Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
     try{ 
      //Start your intent service here. 
     } finally { 
      handler.postDelayed(runnable, 60000); 
     } 
    } 
}; 

在try finally塊,如果你的過程在某種程度上可能會引發錯誤。如果沒有必要,那麼你可以刪除它。

然後在你活動的onCreate()或任何你需要開始重複觸發:

runnable.run(); 
+0

謝謝你的jobscheduler是有用的?特別爲用戶麪糊? –

+0

對於JobScheduler的有效性,它本質上是不準確的;您定義要完成的工作以及需要完成的艱難時間,然後Android會將其與自己的系統進程以及需要無線訪問的其他應用程序進程一起計時。當您使用JobInfo描述Job時,可以將Job設置爲定期。這些是你可能想要的鏈接https://developer.android.com/reference/android/app/job/JobInfo.Builder.html,https://developer.android.com/reference/android/app/job/JobScheduler .html#schedule(android.app.job.JobInfo) – Mercato

+0

謝謝我閱讀文章我沒有太多有關雲消息的信息,但我有一臺服務器,並且我可以在sjonarray中獲得通知問題是我不是確定我應該使用哪種服務,因爲正如你所說,它可以釋放用戶手機的連擊。我想知道你的建議你怎麼看?我應該使用哪種服務? JobScheduler在後臺每30秒罰款一次? firebase或替代?我不想使用它,因爲我認爲使用Firebase系統是無稽之談爲什麼我應該與第三方共享通知我有服務器? –

1

您可以使用警報管理

Intent alarmIntent = new Intent(context, MyService.class); 

    PendingIntent pendingIntent = PendingIntent.getService(context, 0, alarmIntent, 0); 
    AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

    manager.setRepeating(AlarmManager.RTC_WAKEUP, 60000, 60000, pendingIntent); 
+0

感謝您的文章,但這是一個很好的方法,但它對我的應用程序沒有用處,因爲我會在後臺做太多的工作,所以它會釋放用戶電池 –