我正在创建一个使用BroadcastReceiver和WakefulServiceIntent的应用程序,每10分钟调用一次我的应用程序中的方法。问题是,有时它称之为,有时它并不是。即使应用程序在后台运行或屏幕关闭,我也需要每10分钟调用一次此方法。我目前的代码如下。我应该不使用AlarmManager启动计时器吗?我听说过AlarmManager不准确,但是它甚至没有发生故障也不准确?
AlarmManager启动代码:
Intent intent = new Intent(getContext(), UpdateReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getContext(), 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, (System.currentTimeMillis() + ((2 * 60) * 1000)), ((10 * 60) * 1000), pendingIntent);
BroadcastReceiver类:
public class UpdateReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, UpdateService.class);
startWakefulService(context, service);
}
}
WakefulIntentService类:
public class UpdateService extends IntentService {
public UpdateService() {
super("UpdateService");
}
@Override
protected void onHandleIntent(Intent intent) {
System.out.println("updated automatically");
OverviewFragment.refresh(getApplicationContext());
UpdateReceiver.completeWakefulIntent(intent);
}
}
答案 0 :(得分:0)
我在三星旗舰智能手机上开发后台服务和闹钟预定活动方面拥有丰富的经验。
您可以尝试为所有组件禁用电池优化,但即使这样,操作系统也不会可靠调用您的代码。
在我的书中,这是一个错误,但我确信三星和/或谷歌认为它是一个功能(资源管理是他们绝对的首要任务)。