显然,AlarmManager是导致应用程序崩溃的原因。当执行setExactAndAllowWhileIdle方法时,应用程序将停止工作。
我正在开发一个用于收集用户位置的应用程序,并且正在使用AlarmManager计划何时收集要通过REST发送的位置。它在以前的Android版本中可以正常工作,但是在Android 8(更具体的说是LG K12)上进行测试时,却遇到了崩溃的问题。我尝试在代码中放入“ try-catches”,但没有一个被触发。
应用程序本身会不断检查用户是否在移动,并且仅在移动一定距离后才会发送位置信息。我注意到,如果我不动,该应用程序也不会崩溃。
public static void startInMiliSeconds(Context ctx, String action, AlarmManager manager, long timeInMiliseconds) {
Intent intent = new Intent(action);
PendingIntent pending = PendingIntent.getBroadcast(ctx, 0, intent, 0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
manager.setExactAndAllowWhileIdle(AlarmManager.RTC, timeInMiliseconds, pending);
} else {
manager.setExact(AlarmManager.RTC, timeInMiliseconds, pending);
}
}
在登录和同步时,应用程序本身正在发送当前位置,但是如果电话仅从位置移开一点,则应用程序将崩溃。