Android 安卓-服务保持活力

Android 安卓-服务保持活力,android,service,Android,Service,系统有问题。我有运行服务,这是不断地检查位置和计数的距离和时间,因为用户启动它。但在20-25分钟后,许多与其他应用程序的交互服务被终止 我怎样才能预防它 我正在考虑增加第二项服务,这将使我的生活 但在20-25分钟以及与其他应用程序的多次交互之后 服务被破坏了 最有可能的原因是内存使用过多,然后自动内存管理器终止了进程或长时间运行的操作,这意味着@AljoshaBre 我怎样才能预防它 因此,我的第一个想法是检查您的服务是否以某种生命周期方法运行,例如在onResume()中,如果没有,只需重

系统有问题。我有运行服务,这是不断地检查位置和计数的距离和时间,因为用户启动它。但在20-25分钟后,许多与其他应用程序的交互服务被终止

我怎样才能预防它

我正在考虑增加第二项服务,这将使我的生活

但在20-25分钟以及与其他应用程序的多次交互之后 服务被破坏了

最有可能的原因是内存使用过多,然后自动内存管理器终止了进程或长时间运行的操作,这意味着@AljoshaBre

我怎样才能预防它

因此,我的第一个想法是检查您的
服务
是否以某种生命周期方法运行,例如在
onResume()
中,如果没有,只需重新启动
服务
,然后再次执行

但在20-25分钟以及与其他应用程序的多次交互之后 服务被破坏了

最有可能的原因是内存使用过多,然后自动内存管理器终止了进程或长时间运行的操作,这意味着@AljoshaBre

我怎样才能预防它

因此,我的第一个想法是检查您的
服务
是否以某种生命周期方法运行,例如在
onResume()
中,如果没有,只需重新启动
服务
并再次执行即可。

1,最大限度地减少服务的内存使用 2、使您的服务成为前台,例如在服务的onCreate方法中 1、最大限度地减少服务的内存使用 2、使您的服务成为前台,例如在服务的onCreate方法中
不确定这是否适用于您,但我就是这样实现的:

在我的例子中,我需要一个服务每X分钟在后台运行一次,每当它关闭时(无论是由于内存使用还是主要活动进入后台,Android清理),它都会在下一个时间间隔到达时重新触发。我有以下组件和工作流程:

  • 活动A.主要活动,我申请的起点
  • 服务。我想在后台运行的服务,做任何需要做的事情,
    完成后关闭,每X分钟重新启动一次
  • Activity onCreate方法将创建一个pendingent,将其自身和服务传递给它,如下所示:

    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,它将“PeriodicContentSender”(定义见上文)作为参数,并根据用户偏好(连接间隔)发送意图:

    // Schedule the alarm to start
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.setRepeating(
      AlarmManager.ELAPSED_REALTIME_WAKEUP, 0, connection_Interval, periodicIntentSender);
    
    AlarmManager将确保每X分钟发送一次意图。 我的服务S一直在侦听此意图,并在每次发送此意图时获得wakedup。一旦再次触发服务,就会调用其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>
        }
    }
    
    公共类服务扩展IntentService实现LocationListener{
    .
    .
    /*
    *(非Javadoc)
    * 
    *@see android.app.IntentService#onHandleIntent(android.content.Intent)
    */
    @凌驾
    受保护的手部内容无效(意图){
    }
    }
    

    希望这能有所帮助。

    不确定这是否适用于您,但我就是这样实现的:

    在我的例子中,我需要一个服务每X分钟在后台运行一次,每当它关闭时(无论是由于内存使用还是主要活动进入后台,Android清理),它都会在下一个时间间隔到达时重新触发。我有以下组件和工作流程:

  • 活动A.主要活动,我申请的起点
  • 服务。我想在后台运行的服务,做任何需要做的事情,
    完成后关闭,每X分钟重新启动一次
  • Activity onCreate方法将创建一个pendingent,将其自身和服务传递给它,如下所示:

    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,它将“PeriodicContentSender”(定义见上文)作为参数,并根据用户偏好(连接间隔)发送意图:

    // Schedule the alarm to start
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.setRepeating(
      AlarmManager.ELAPSED_REALTIME_WAKEUP, 0, connection_Interval, periodicIntentSender);
    
    AlarmManager将确保每X分钟发送一次意图。 我的服务S一直在侦听此意图,并在每次发送此意图时获得wakedup。一旦再次触发服务,就会调用其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>
        }
    }
    
    公共类服务扩展IntentService实现LocationListener{
    .
    .
    /*
    *(非Javadoc)
    * 
    *@see android.app.IntentService#onHandleIntent(android.content.Intent)
    */
    @凌驾
    受保护的手部内容无效(意图){
    }
    }
    

    希望这有帮助。

    保留服务应用程序实例会导致问题吗?我认为不会,因为我的意思是,很可能是由于运行操作太长或内存管理器杀死了进程本身。保留服务应用程序实例会导致问题吗?我想不会,正如我的意思,这很可能是由于运行时间太长或内存管理器杀死了进程本身造成的。您应该尝试,使用Alarm manager服务,在特定的计时器间隔使用Alarm manager重新启动服务,它的工作原理与charmHow我可以这样做吗?你能举个小例子吗?你应该试试,用Alarm Manager服务,在特定的时间间隔用Alarm Manager重新启动服务,它就像charmHow一样工作我怎么能做到?你能举个小例子吗?然后把它贴出来作为我可以投票的答案。