【发布时间】:2015-02-07 22:18:52
【问题描述】:
我正在开发一个每 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();
}
这里是 on receive 方法:
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 秒内运行重复警报?
【问题讨论】:
标签: android alarmmanager wakelock android-wake-lock repeatingalarm