我正在开发运行备份操作,每30分钟一个原生的Android应用程序。
我使用AlarmManager
为了这个目的,它工作正常。 下面是我使用启动报警的代码:
public static void startSync(Context context) {
alarmIntent = new Intent(context, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
// int interval = 3600000;
int interval =30000 ;
manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
ComponentName receiver = new ComponentName(context, SampleBootReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
Toast.makeText(context, "Sync Started", Toast.LENGTH_SHORT).show();
}
这里是上获得方法:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent arg1) {
PowerManager pm = (PowerManager) context.getSystemService(context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
wl.acquire();
Intent eventService = new Intent(context, SyncInBackground.class);
context.startService(eventService);
wl.release();
}
}
我注意到,当我的设备不处于待机状态,操作花了5秒(我计算出它在程序上),但是当移动处于待机模式下,它用了11秒。 这就是为什么我用wake_lock
在后台运行的服务备份操作之前,为了让应用程序只需要5秒钟。
但我仍然得到同样的结果,如果在待机模式下移动...它仍然需要11秒以上,5数秒如果不是处于待机模式。
我能做些什么让我的后台服务运行的重复报警5秒而不是11秒?