2016-05-17 16 views
0

Androidでは、アプリが終了または終了しても10分または15分ごとにタスクをスケジュールするアクティビティがあります(通知が表示されます)。Android:短い時間間隔の繰り返しタスクのスケジュール設定は機能していません

私はalarmManager.setExactalarmManager.setalarmManager.setRepeatingAlarmManagerを使用して、それをスケジュールしようとしたと、それらのどれも正確な時刻にイベントを発射していません。イベントの発生には多くの遅延があります。ときには正確な時刻に発砲し、時には遅れが生じることがあります。遅延の範囲は15分〜数時間です。

私は、AndroidManagerがLollipop 5.1からイベントを遅らせるとアンドロイドに伝えました。私はHandlersと同様にTimerTaskTimerと試しましたが、アプリが殺されるとすぐに殺されます。

短い間隔で実行され、バックグラウンドで実行される代替ソリューションはありますか。

答えて

0

必要なものはServiceCountDownTimerです。

サービスを開始し、同じタイマーを再初期化してタイマーのonFinishメソッドで通知を表示したときに、10分から15分のカウントダウンタイマーを初期化します。

この方法では、アプリを終了しても通知が表示されます。

+0

しかし、アプリやサービスがロリポップから始まると自動的にサービスを再開するのは簡単ではないと思います。 –

+0

はい、簡単ではないし、実装したい機能も一種のものです。したがって、ソリューションを正確に実装したい場合は、難しい方法を選択する必要があります。 サービスをブロードキャストしてブロードキャストレシーバで再起動する必要があります。 –

0

更新された動作例:

これは、曜日と時刻を設定し、アラームします。その後、3分ごとに繰り返します。

MainActivity:

public class MainActivity extends AppCompatActivity { 

    private AlarmManager alarmManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     calendar.set(Calendar.HOUR_OF_DAY, 17); 
     calendar.set(Calendar.MINUTE, 03); 
     calendar.set(Calendar.SECOND, 0); 
     calendar.set(Calendar.MILLISECOND, 0); 
     calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); 

     Intent dailyIntent = new Intent(this, AlarmActivity.class); 

     PendingIntent mondayIntent = PendingIntent.getActivity(this, 1000, dailyIntent, 0); 

     alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

     if (Build.VERSION.SDK_INT >= 19) { 
      alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), mondayIntent); 
     } else { 
      System.out.println("------------------------"); 
     } 
    } 
} 

AlarmActivity:

public class AlarmActivity extends Activity { 

    private AlarmManager alarmManager; 
    Intent intent; 
    PendingIntent pendingIntent; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.alarm_activity); 

     alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     intent = new Intent(this, AlarmActivity.class); 
     pendingIntent = PendingIntent.getActivity(this, 1000, intent, 0); 

     alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
       SystemClock.elapsedRealtime() + 
         60 * 1000 * 3, pendingIntent); 
    } 
} 

・ホープ、このことができます。

編集: はまた、システムの再起動やパッケージ(あなたのアプリ)のアップデートであなたのアラームを設定することを忘れないでください。

+0

実際に私はそれらをすでに試してきました。 –

+0

@DileepPerlaこれは実用的でテスト済みの例です。あなたのコードを共有すると、何が間違っているかを検出することがあります。 – s0i1

+0

あなたは10分間隔で試してみて、それが長い時間間隔で働いているかどうか、その仕事が午前と夕方にスケジュールされていても10分以下の間隔 –

関連する問題