系统有问题。我有运行服务,它会不断检查位置并计算用户启动后的距离和时间。但在 20-25 分钟后,与其他应用程序服务的许多交互被终止。
我该如何预防?
我正在考虑添加第二项服务,这将使我保持活力。
不确定这是否适合您,但这就是我实现它的方式:
在我的情况下,我需要一个服务每隔 X 分钟在后台继续运行,并且每当它关闭时(无论是由于内存使用还是主要活动进入后台并且 Android 清理它)它都会在下一次重新触发时再次触发达到时间间隔。我有以下组件和工作流程:
Activity onCreate 方法将创建一个PendingIntent,并传递它本身和服务 S,如下所示:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Create an IntentSender that will launch our service, to be scheduled
// with the alarm manager.
periodicIntentSender = PendingIntent.getService(
ActivityX.this, 0, new Intent(ActivityX.this, ServiceS.class), 0);
在我的活动中,我实现了一个AlarmManager,它将“ periodicIntentSender ”(上面定义的)作为参数并根据用户偏好(connection_Interval)发送意图:
// Schedule the alarm to start
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(
AlarmManager.ELAPSED_REALTIME_WAKEUP, 0, connection_Interval, periodicIntentSender);
AlarmManager 将确保每 X 分钟发送一次意图。我的 Service S 一直在监听这个 Intent 并在每次发送这样的 Intent 时被唤醒。一旦再次触发服务,就会调用其onHandleIntent方法。
public class ServiceS extends IntentService implements LocationListener {
.
.
/*
* (non-Javadoc)
*
* @see android.app.IntentService#onHandleIntent(android.content.Intent)
*/
@Override
protected void onHandleIntent(Intent intent) {
<WHATEVER YOU NEED TO DO>
}
}
希望这可以帮助。
但在 20-25 分钟后,与其他应用程序服务的许多交互被终止。
最有可能是由于内存使用过多,然后自动内存管理器杀死了您的进程或长时间运行的操作,就像@AljoshaBre 一样。
我该如何预防?
所以我的第一个想法是检查你Service
是否以某种生命周期方法运行,例如onResume()
,如果没有,你应该重新启动Service
并再次执行它。
@Override
public void onCreate()
{
super.onCreate();
Notification notification = new Notification(R.drawable.icon_app_small, getText(R.string.app_name),System.currentTimeMillis());
Intent notificationIntent = new Intent(this, [yourService].class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(this, [name string], [notification msg string], pendingIntent);
startForeground(Notification.FLAG_ONGOING_EVENT, notification);
}