我正面临- (void)btnTap:(UIButton*) sender {
if (!self.tableActivities.isEditing) {
//Perform Action
}
}
的奇怪行为。
六个月前,我的公司向Google Play发布了一款应用。该应用程序的一项功能是同步来自服务器的数据,用户可以在其中执行手动同步或激活自动同步功能。
自动同步是一种不精确的重复闹钟,并按照Google在Scheduling Repeating Alarms教程中所描述的那样实现。
以下是启用/禁用警报的代码
AlarmManger
来自AlarmReceiver
public void startAlarm(Context context) {
alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, SyncAlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
alarmManager.setInexactRepeating(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
AlarmManager.INTERVAL_HOUR,
AlarmManager.INTERVAL_HOUR,
alarmIntent
);
ComponentName receiver = new ComponentName(context, BootAlarmReceiver.class);
PackageManager packageManager = context.getPackageManager();
packageManager.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
Log.i("Sync", "Sync alarm started");
}
public void stopAlarm(Context context) {
alarmManager.cancel(alarmIntent);
ComponentName receiver = new ComponentName(context, BootAlarmReceiver.class);
PackageManager packageManager = context.getPackageManager();
packageManager.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
Log.i("Sync", "Sync alarm stopped");
}
该功能已在多个设备中进行了测试,并且按预期工作。此外,直到现在,没有用户抱怨该功能无效。
到目前为止一切顺利。但是,2周前,一位新开发人员加入了我们的团队,并在她Meizu M2 Note中安装了该应用。现在这就是事情变得复杂的地方。
她注意到(在2GB免费数据计划用得太快的某些日子之后)应用程序每5或6秒同步一次。
我们首先想到的是我们没有正确设置闹钟。但是,在多次查看代码而没有找到可能已经错误设置的任何线索之后,我们决定下载在web上找到的一些项目样本,看看是否会发生相同的行为。好吧,public class SyncAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("Sync", "Auto sync started");
context.startService(AndroidSyncService.AUTO_SYNC_INTENT(context));
}
}
具有完全相同的行为。警报随机发射并经常发射。
经过一番进一步调查后,我们发现这种行为并非随意。似乎某些特定操作正在触发警报,例如打开/关闭屏幕,锁定/解锁设备,打开/关闭互联网连接。
关于可能导致这种情况的任何想法?