我平时写的代码,开始与服务AlarmManager
。
intent = new Intent(getActivity(), someservice.class);
pendingNotificationIntent = PendingIntent.getService(getActivity(), 0, intent, 0);
alarm = (AlarmManager) getActivity().getSystemService(getActivity().ALARM_SERVICE);
int interval = 30 * 1000;
long now = Calendar.getInstance().getTimeInMillis();
alarm.setRepeating(AlarmManager.RTC_WAKEUP, now, interval, pendingNotificationIntent);
我AsyncTask
是我注册的私有类AlarmManager
对象。
我如何可以调用AsyncTask
,而不是使用服务的AlarmManager
对象?
PS。 如果有更好的方式来运行AsyncTask
每X秒/分钟,请申请吧!
这是你如何做到这一点:
1.)定义静态意图(intent1),并用它设定时间时传递给AlarmManager。 所以,现在当过一次,就会失效; AlarmManager将通过发送intent1通知。
2)在intent1的广播接收器的的onReceive,开始的AsyncTask。 在的AsyncTask结束而终止,设置AlarmManager的下一次。
基于munish-katoch的回应,我有以下具体的解决方案。
设置闹铃:
Intent intent = new Intent(context, AlarmReceiver.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 5 * 1000, 60 * 1000, alarmIntent);
上面的代码配置AlarmManager
开火AlarmReceiver
,其被定义如下:
public class AlarmReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
new MyAsyncTask.execute();
}
}
在报警的情况下, AlarmReceiver
开始MyAsyncTask
。
这里是龙
有生命周期的问题与实例相关联AsyncTask
从WakefulBroadcastReceiver
,即,上述方案可能会导致MyAsyncTask
过早死亡。 此外, 穿线规则违反 。