Android在后台运行进程

Android在后台运行进程,android,android-intentservice,android-broadcastreceiver,Android,Android Intentservice,Android Broadcastreceiver,我正在制作一个应用程序,它使用一个BroadcastReceiver和一个WakefulServiceIntent,每10分钟在我的应用程序中调用一个方法。问题是,有时它叫它,有时它不叫。我需要每10分钟调用一次此方法,即使应用程序在后台运行或屏幕关闭。我现在的代码如下。我是否应该使用AlarmManager启动计时器?我听说AlarmManager不准确,但如此不准确,以至于连它都不响 AlarmManager启动代码: Intent intent = new Intent(getCo

我正在制作一个应用程序,它使用一个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);
广播接收器类别:

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);

    }

}

我在三星旗舰智能手机上开发后台服务和定时报警事件方面有着丰富的经验

您可以尝试禁用所有组件的电池优化,但即使如此,操作系统也不会可靠地调用您的代码

在我的书中,它是一个bug,但是我相信三星和/或谷歌认为它是一个特性(资源管理是他们的绝对优先)。