0
私はクラスノッダーがバックグラウンドで実行されています。 1分ごとに再起動します。 notiferのonReceiveは次のとおりです。アラームをキャンセルして新しいデータで開始できません(アラームマネージャー)
notiferデータの変更が検出されたとき、私はUIスレッドからこれを行う上で作業する必要があるデータに変更があるたび@Override
public void onReceive(final Context contextn, final Intent intent)
{
Log.d("Notifier","started");
String id[] = intent.getStringArrayExtra("id");
Log.d("notifier",String.valueOf(id.length));
if (id!=null) {
context = contextn;
backgroundsync back = new backgroundsync();
back.execute(id);
Intent callagain = new Intent(context, notifer.class);
callagain.putExtra("id", id);
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, callagain, 0);
AlarmManager notifalm;
notifalm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
notifalm.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 60000, alarmIntent);
}
}
。
cancelalarm();
//changed data in database here
setalarm();
方法の定義である:
private void setalarm()
{
Intent callagain = new Intent(this,notifer.class);
String ids[]=interact.checked();
for (int i=0;i<ids.length;i++)
Log.d("Main checked new",ids[i]);
callagain.putExtra("id", ids);
alarmIntent = PendingIntent.getBroadcast(this, 0, callagain, 0);
AlarmManager notifalm;
notifalm = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
notifalm.setExact(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),alarmIntent);
}
private void cancelalarm()
{
Intent callagain = new Intent(this,notifer.class);
String ids[]=interact.checked();
for (int i=0;i<ids.length;i++)
Log.d("Main checked old",ids[i]);
callagain.putExtra("id", ids);
alarmIntent = PendingIntent.getBroadcast(this, 0, callagain, 0);
AlarmManager notifalm;
notifalm = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
notifalm.cancel(alarmIntent);
}
interact.checked
()notiferに送信する必要があるデータベースからデータを返します。
データが変更されてもnotiferが古いデータを処理していても問題になります。 Pls、私はここで何時間も立ち往生しています。
他の情報が必要な場合はお知らせください。