当前位置: 首页 > 知识库问答 >
问题:

当activity杀死或停止或强制关闭时后台服务停止

柯宜年
2023-03-14

我的问题是,当我按Home按钮关闭我的应用程序时,后台服务停止了,之后它需要再次登录应用程序,然后后台服务将启动,所以我怎么做像Whatssapp,如果应用程序将关闭或关闭,然后服务也可以在后台运行。。。。

共有3个答案

宦树
2023-03-14

好的,我只是猜测--真的不想检查你的应用程序的所有代码。

服务可以通过两种方式启动:

  1. 使用bindService(),您可能正在这里做什么。这很好,但意味着服务将在最后一个客户机解除绑定后立即被释放(这可能是在某个onPause()方法中所做的。
  2. 使用startService()命令。在这种情况下,只要您停止服务,它就会运行,否则系统会认为该服务占用了很多内存,而这些内存应该用于一些更紧急的任务(例如:一些胖activity)

解决问题的快速方法(如果我的猜测是正确的)是将服务切换到“startservice”模式下运行。如果您不想玩太多代码,那么最好放在服务的onBind()方法(只需尝试从服务本身启动)。当然,这不会启动服务,但会将其模式切换到“长期运行,真正的后台模式”。这不会解决你的所有问题,正如我在上面提到的-服务仍然可以被杀死的系统,以获得更多的资源。您可以通过一些方式来防止它:如果您真的想要保持服务运行,您应该考虑使用前台服务(google it),这将增加服务存活的机会。但是最好的选择只是使用服务生命周期,如果需要保存数据并在服务启动时加载它们,就像您应该使用activity一样。对于长期运行的后台服务,也有启动粘滞选项,这将导致服务在每次杀死,崩溃等之后启动。

韶兴德
2023-03-14

很简单,只要按照下面链接中的场景就可以了。

即使应用程序已从最近的应用程序中清除,仍继续服务

您的服务和进程(在您的服务内部运行的线程)将保持连续。

欧阳玺
2023-03-14

我也有同样的问题。当您将应用程序从应用程序托盘中刷出时,后台服务的进程将被终止。

您可以在服务中添加以下代码,也可以查看此问题

@Override
public void onTaskRemoved(Intent rootIntent){
   Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass());
   restartServiceIntent.setPackage(getPackageName());

   PendingIntent restartServicePendingIntent =  PendingIntent.getService(getApplicationContext(), 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT);
   AlarmManager alarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
   alarmService.set(
      AlarmManager.ELAPSED_REALTIME,
      SystemClock.elapsedRealtime() + 1000,
      restartServicePendingIntent);

   super.onTaskRemoved(rootIntent);
}

这段代码所做的是,当你的activity被杀死时,一旦它被杀死,它就会重新启动你的应用程序的进程。

 类似资料:
  • 我正在使用服务作为前台之一。在android pre O版本上,一切都很好。但在Android奥利奥当我关闭app时,前台服务也关闭了…… 你知道为什么它与应用程序关闭以及如何防止它吗? 谢了!

  • 当用户使用后退按钮退出应用程序时,Android中的后台服务将停止运行。如果应用程序在前台或后台(点击HOME按钮),同样的服务工作得很好。 有3个案例: null MainActivity.java SimpleService

  • 从Android API 26开始,Android系统要求“执行一些用户可以注意到的操作”的服务将自身注册为前台服务。和“前台服务必须显示通知” 我有一个播放音频文件的服务。当播放暂停时,用户应该能够滑动通知(与Google Play音乐应用程序一样)。但是如果我调用,那么我的服务会在几分钟内被系统杀死。 暂停播放时,如何允许删除通知?

  • 问题内容: 我有一个媒体播放器服务,可在整个应用程序的后台播放音乐,例如: 问题在于,当用户更改应用程序或进入手机主屏幕(应用程序在后台运行)时,音乐仍在播放。 我试图停止它和方法,但是当我更改活动时这会停止音乐,这是我不希望的(我希望音乐在用户浏览活动时继续播放)。 更新资料 我尝试了广播: 我加了 在音乐服务的onCreate和接收事件的方法中: 在应用程序类中,我这样做: 但是音乐不会恢复

  • 我的问题改变了一点,请看看下面的EDIT 2 我正在学习如何在Android上使用服务和录音。 我想创建一个应用程序,除了启动服务什么也不做:在请求权限(,)后,应用程序只从调用。 然后,该服务将录制音频并将其传输到给定的IP地址。我从这个问题的答案中获得了对音频流服务器和客户端的灵感。到目前为止,我正在Android Studio Emulator上测试Android 6.0上的应用程序。 这是

  • 我正在构建一个在后台工作的iOS应用程序,并每3分钟将用户的位置发布到服务器上(因为这是iOS 7上的最长后台执行时间)。但是,有一个问题,后台服务在随机时间终止。所以有时候它可以在后台运行2个小时,有时候7个小时,然后3个小时,然后是随机的,依此类推。 下面的代码产生错误。我已经能够检测到它何时终止,也就是[UIApplication sharedApplication]何时终止。剩余的背景时间

  • 我想知道如何有效地清理在飞行中创建的akka演员。 要提供一点背景信息: 每个事件创建的演员层次结构。 主管- 在我的应用程序中,主管参与者动态创建其他参与者(在定期事件上)。我想在该事件的处理步骤完成后清理参与者。 所以,一旦处理完成,我想杀死所有的儿童演员。 我在成功完成后以与创建相反的方式传播消息(successfulProcessing)。(1)- 这是主管演员的代码。 这是清理动态创建的

  • 我们在让后台服务工作方面遇到了一些麻烦。即使在应用程序关闭和手机锁定的情况下,计时器也应该每秒执行一次代码。只要应用程序打开或在后台,手机正在使用,这就可以正常工作,但当手机被锁定并处于待机状态时,服务会在一段时间后自动停止。 代码是根据以下示例建模的:http://arteksoftware.com/backgrounding-with-xamarin-forms/ 然后,在PCL中: 最后,当