2017-05-13 11 views
0

私は自分のサーバーから通知を受けるクラスを持っています。私はfirebaseクラウドメッセージングを使用しないので、intentserviceクラスでデータを取得しています。しかし、60秒ごとに通知を確認したいが、タイマーは機能しないアンドロイドインテントサービスのタイマー

protected void onHandleIntent(Intent intent) { 

私はアプリを起動すると正常に起動するが、その後はチェックインしない。

バックグラウンドで60秒ごとに通知を確認する手段はありますか?

は注:私はGCMのfirebaseを使用していないと私は

答えて

1

IntentServiceは、あなたがそれを意図を送信するときに、サービスを開始しますが、その意図に定義するものは何でも実行し、その後、サービスを終了し、それを使用することはありません。タイマーが実行されることを意図している場合は、おそらくそれをサービス外で実行します。携帯電話のラジオを使用して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); 
     } 
    } 
}; 

試して、あなたのプロセスが何らかの形でエラーを誘発する可能性がある場合finallyブロックがあります。必要でない場合は削除することができます。あなたの活動のonCreate()またはあなたが繰り返しトリガーを起動するために必要な場所で次に

runnable.run(); 
+0

を使用することができ便利ですjobschedulerのありがとう!ユーザーバッターにとって特別なものですか? –

+0

JobSchedulerが効果的であるためには、性質上不正確です。実行するジョブと実行する必要がある時間を定義すれば、Androidは自身のシステムプロセスや無線アクセスが必要な他のアプリケーションプロセスと一緒に時間をとるでしょう。 JobInfoを使用してジョブを記述するとき、定期的にジョブを設定することができます。これらのリンクは、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

あなたの投稿に感謝しますが、これは良い方法ですが、私はバックグラウンドであまりにも多くの作業をするので、ユーザーバッテリーを放電するので、私のアプリにとっては有用ではありません –