Android 每90秒在安卓系统中进行一次定期呼叫,即使在应用程序关闭时也是如此
要求是每90秒记录一次位置,并将其写入数据库(sqlite),如果网络可用,则调用api,即使应用程序已关闭。 实现这一目标的最佳方式是什么? 我应该启动意向服务吗?或者我应该找一个闹钟管理员。我在某个地方读到,只有在持续时间超过10分钟时,才应使用报警管理器 服务是可以执行长时间运行的应用程序组件 在后台操作,不提供用户界面 报警管理器适用于您希望 应用程序代码在特定时间运行,即使您的应用程序 当前未运行。 报警管理器保持CPU唤醒锁,直到报警结束 接收方的onReceive()方法正在执行。这保证了 在您处理完广播之前,手机不会休眠 随服务一起去 服务是可以执行长时间运行的应用程序组件 在后台操作,不提供用户界面 报警管理器适用于您希望 应用程序代码在特定时间运行,即使您的应用程序 当前未运行。 报警管理器保持CPU唤醒锁,直到报警结束 接收方的onReceive()方法正在执行。这保证了 在您处理完广播之前,手机不会休眠Android 每90秒在安卓系统中进行一次定期呼叫,即使在应用程序关闭时也是如此,android,performance,Android,Performance,要求是每90秒记录一次位置,并将其写入数据库(sqlite),如果网络可用,则调用api,即使应用程序已关闭。 实现这一目标的最佳方式是什么? 我应该启动意向服务吗?或者我应该找一个闹钟管理员。我在某个地方读到,只有在持续时间超过10分钟时,才应使用报警管理器 服务是可以执行长时间运行的应用程序组件 在后台操作,不提供用户界面 报警管理器适用于您希望 应用程序代码在特定时间运行,即使您的应用程序 当前未运行。 报警管理器保持CPU唤醒锁,直到报警结束 接收方的onReceive()方法正在执行
使用该服务。我建议使用AlarmManager,因为即使设备处于睡眠状态,它也可以运行。 请注意,对于API v>19,警报传递是不精确的,您必须使用setExact API来实现这一点。 看 注意:从API 19开始,传递给此方法的触发时间被视为不精确:在此时间之前不会发出警报,但可能会延迟并在一段时间后发出。操作系统将使用此策略,以便在整个系统中一起“批量”报警,最大限度地减少设备需要“唤醒”的次数,并最大限度地减少电池的使用。一般来说,只要警报安排在遥远的将来,在不久的将来安排的警报不会延迟。 在新的批处理策略下,交货订单保证不像以前那样强大。如果应用程序设置了多个警报,则这些警报的实际交付顺序可能与其请求的交付时间顺序不匹配。如果您的应用程序有很强的排序需求,那么您可以使用其他API来获得必要的行为;请参见设置窗口(int,long,long,pendingent)和设置精确窗口(int,long,pendingent)
我建议使用AlarmManager,因为即使设备处于休眠状态,它也可以运行。 请注意,对于API v>19,警报传递是不精确的,您必须使用setExact API来实现这一点。 看 注意:从API 19开始,传递给此方法的触发时间被视为不精确:在此时间之前不会发出警报,但可能会延迟并在一段时间后发出。操作系统将使用此策略,以便在整个系统中一起“批量”报警,最大限度地减少设备需要“唤醒”的次数,并最大限度地减少电池的使用。一般来说,只要警报安排在遥远的将来,在不久的将来安排的警报不会延迟。 在新的批处理策略下,交货订单保证不像以前那样强大。如果应用程序设置了多个警报,则这些警报的实际交付顺序可能与其请求的交付时间顺序不匹配。如果您的应用程序有很强的排序需求,那么您可以使用其他API来获得必要的行为;请参见设置窗口(int,long,long,pendingent)和设置精确窗口(int,long,pendingent)
您使用的是Intent service和Broadcastreceiver组件,因为即使关闭应用程序,这些组件也只会持续侦听 如果你想每90秒都得到一些东西,那么就使用报警管理器
AlarmManager manager = (AlarmManager) (context)
.getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(context, YourAlarmReceuver.class);
//alarmIntent.putExtra("syncData", favoritesArrayList);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,
alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
manager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(), 90*1000, pendingIntent);
你的接受器是这样的
public class SyncAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent stIntent = new Intent(context,
YourService.class);
context.startService(stIntent);
}
你的服务课是这样的吗
public class DataSyncService extends IntentService {
public DataSyncService() {
super(DataSyncService.class.getName());
// TODO Auto-generated constructor stub
}
@Override
protected void onHandleIntent(Intent intent) {
//write your logic here
// get the location and update the database
}
}
您还应实例化alarm manager引导已完成。使用Intent service和Broadcastreceiver componenst,因为即使关闭应用程序,这些组件也只能持续侦听 如果你想每90秒都得到一些东西,那么就使用报警管理器
AlarmManager manager = (AlarmManager) (context)
.getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(context, YourAlarmReceuver.class);
//alarmIntent.putExtra("syncData", favoritesArrayList);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,
alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
manager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(), 90*1000, pendingIntent);
你的接受器是这样的
public class SyncAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent stIntent = new Intent(context,
YourService.class);
context.startService(stIntent);
}
你的服务课是这样的吗
public class DataSyncService extends IntentService {
public DataSyncService() {
super(DataSyncService.class.getName());
// TODO Auto-generated constructor stub
}
@Override
protected void onHandleIntent(Intent intent) {
//write your logic here
// get the location and update the database
}
}
您还应该实例化alarm manager引导完成。alarm manager将是适合您情况的理想选择。注册的报警在设备处于休眠状态时保留,但在关闭并重新启动时将被清除。
因此,您可以使用它在90秒内运行作业。它可能仅在设备重新启动后的第一次中断间隔。报警管理器将是适合您情况的理想选择。注册的报警在设备处于休眠状态时保留,但在关闭并重新启动时将被清除。
因此,您可以使用它在90秒内运行作业。它可能仅在设备重新启动后第一次中断间隔。我发现的另一种方法是使用Firebase作业调度器。这是运行在棉花糖或更高版本上的设备的最佳选择。它易于集成和定制。
我发现的另一种方法是使用Firebase作业调度器。这是运行在棉花糖或更高版本上的设备的最佳选择。它易于集成和定制。
使用已启动的服务您可以尝试使用正常的服务和处理程序。处理程序每90秒执行一次必要的任务,如果使用“START_STICKY”标志启动,则处理程序可能位于将在后台运行的服务内部;使用已启动的服务您可以尝试使用普通服务和处理程序。惠尔