系统有问题。我有运行服务,它不断检查位置,并计算用户启动后的距离和时间。但是在20-25分钟之后,许多与其他应用程序服务的交互正在被杀死。
我该怎样阻止它?
我正在考虑增加第二项服务,让我活着。
答案 0 :(得分:2)
不确定这是否适合您,但这是我实现它的方式:
在我的情况下,我需要一个服务,以便每隔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分钟发送一次意图。 我的服务S一直在监听这个意图,每次发送这样的意图时都会被唤醒。只要再次触发服务,就会调用其 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>
}
}
希望这有帮助。
答案 1 :(得分:1)
但是经过20-25分钟和许多其他应用程序的交互 服务正在被杀死。
最有可能的原因是内存使用量太大,然后自动内存管理器终止了你的进程或长时间运行的操作,如 @AljoshaBre 。
我该怎样阻止它?
所以我的第一个想法是检查Service
是否在某个生命周期方法中运行,例如在onResume()
中,如果没有,只需要重新启动Service
并执行它试。
答案 2 :(得分:1)
@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);
}