当前位置: 首页 > 面试题库 >

Android服务停止

於宾白
2023-03-14
问题内容

我已经到了秃顶几步之遥…

我正在尝试运行一项服务,该服务将检查我工作中的服务器是否正在运行。应该每5分钟执行一次。

我经历过TimerTask,ScheduledExecutorService,最后是Handler。他们都工作了好几个小时,除了一些不准确的地方外,还有1-5分钟的时间,然后突然,“计时器”就停止了发射。

现在,我已经了解到,如果Scheduler遇到未捕获的异常,它将停止运行,而且我敢肯定TimerTask也是如此-但是检查日志文件,根本没有任何异常…

今天下班回家时,我决定对Handler进行实验。

我创建了2个处理程序,其中一个将运行用于检查服务器的代码,并一次增加一个int。另一个将只记录上述int的值,以便在遇到异常时不停止(我看不出它会如何)。

它运行良好,通常会出现1-5分钟的误差,持续几个小时然后停止,以下是日志的最后几行:

02-07 20:03:25.892 D/dalvikvm(  992): GC_EXPLICIT freed 192K, 53% free 4295K/9031K, external 3755K/4825K, paused 114ms
02-07 20:03:35.572 D/dalvikvm( 5472): GC_EXPLICIT freed <1K, 54% free 2895K/6279K, external 2002K/2137K, paused 61ms
02-07 20:04:42.212 V/ServerChecker(12568): Timer triggered
02-07 20:04:42.212 V/ServerChecker(12568): Checking: linux15
02-07 20:04:44.152 V/ServerChecker(12568): Checked: linux15
02-07 20:04:44.152 V/ServerChecker(12568): Checking: linux1
02-07 20:04:44.462 V/ServerChecker(12568): Checked: linux1
02-07 20:04:44.462 V/ServerChecker(12568): Checking: linux12
02-07 20:04:44.762 V/ServerChecker(12568): Checked: linux12
02-07 20:04:44.762 V/ServerChecker(12568): Checking: linux9
02-07 20:04:45.072 V/ServerChecker(12568): Checked: linux9
02-07 20:04:45.072 V/ServerChecker(12568): Checking: linux14
02-07 20:04:45.382 V/ServerChecker(12568): Checked: linux14
02-07 20:04:45.382 V/ServerChecker(12568): Test timer triggered: 13
02-07 20:05:01.002 E/InputDispatcher(  223): channel '406cefc8 com.n04dev.serverchecker/com.n04dev.serverchecker.ServerChecker (server)' ~ Consumer closed input channel or an error occurred.  events=0x8
02-07 20:05:01.002 E/InputDispatcher(  223): channel '406cefc8 com.n04dev.serverchecker/com.n04dev.serverchecker.ServerChecker (server)' ~ Channel is unrecoverably broken and will be disposed!
02-07 20:05:08.932 D/dalvikvm(12842): GC_EXPLICIT freed 73K, 51% free 2641K/5379K, external 2002K/2137K, paused 37ms
02-07 20:05:09.132 D/dalvikvm(  185): GC_EXPLICIT freed 11K, 53% free 2554K/5379K, external 2002K/2137K, paused 96ms
02-07 20:05:12.022 D/dalvikvm(  185): GC_EXPLICIT freed <1K, 53% free 2554K/5379K, external 2002K/2137K, paused 164ms
02-07 20:05:12.062 D/dalvikvm(  185): GC_EXPLICIT freed <1K, 53% free 2554K/5379K, external 2002K/2137K, paused 36ms
02-07 20:05:18.612 D/dalvikvm(12852): GC_EXPLICIT freed 59K, 52% free 2596K/5379K, external 2002K/2137K, paused 72ms

我真的希望你们对我做错了什么有所了解。我已经用了好几个星期了。尝试不同的计时器,让计时器尝试捕获“主”计时器,然后重新启动它,但是没有运气,正如我的上一个实验所示,它似乎并没有计时器有问题..我认为..


问题答案:

我经历过TimerTask,ScheduledExecutorService,最后是Handler。他们都工作了好几个小时,除了一些不准确的地方外,还有1-5分钟的时间,然后突然,“计时器”就停止了发射。

当然。这些都不是专为您的目的而设计的,因为它们既不会使设备保持清醒状态,也无法与Android框架完美配合。在RAM
24x7中提供服务只是为了标记时间的流逝是浪费的,并且Android在关闭诸如此类的永久性服务时,每次传递版本时都会变得更加积极。

使用AlarmManager设置您的日程安排和IntentService做实际的工作。它会IntentService自动为您提供网络I /
O的后台线程,并在工作完成后自动关闭服务。

如果您打算即使设备进入睡眠状态也要发生这种情况,请_WAKEUP通过AlarmManager和和WakefulIntentService(或类似的方式)使用警报。



 类似资料:
  • 问题内容: 在这里,我尝试了简单的服务程序。启动服务可以正常工作并生成Toast,但停止服务则不能。此简单服务的代码如下: 调用此服务的活动的代码如下: 使用该停止按钮帮助我停止服务,该按钮在onDestroy()方法中生成吐司。我已经在这里看到了很多有关停止服务问题的帖子,但并不令人满意,因此发布了新问题。希望得到满意的答复。 问题答案: 是错误的名字 您是否仅在此问题或代码中犯了错误?

  • 我的应用程序设置为(非故意)服务将使用gps/网络侦听器轮询位置。它工作得很好,因为我负责服务何时结束(即在找到新位置或达到超时时调用stopSelf())。然而,我最近读到,intentService可能更适合长时间运行的任务,因为它不是在ui线程上运行的,而是在自己的工作线程上运行的。问题是,现在它不允许服务在任何时间运行(我假设这是因为服务中没有任何活动发生,而侦听器等待接收位置,因此服务本

  • 我创建了一个服务,并希望一直运行此服务,直到我的电话重新启动或强制关闭。服务应该在后台运行。 创建的服务和启动服务的示例代码:

  • 问题内容: 我正在使用背景音乐创建游戏应用程序。我使用Android Service播放背景音乐是​​因为我想在更改活动时运行BGM。我的问题是,我在每个活动的onPause方法中都声明了finish()(我不想让用户返回并想杀死该活动)。 因此,当我打算进行其他活动时,它将调用onDestroy并停止该服务。我想停止该服务以完全退出应用程序(按下主页按钮),并想要通过onPause()中的BGM

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

  • 问题内容: 我目前有一项使用以下活动在活动的onCreate方法中启动的服务: 现在,我需要能够在按下按钮时停止该服务,并在再次按下按钮时再次重新启动它,但是我不确定如何停止该服务并在onCreate方法之外重新启动它。 我想我需要以不同于当前正在执行的方式启动该服务?但是我不确定最好的方法。 我曾在android中查看过stop服务,但是他们启动服务的方法似乎在onCreate中不起作用。 我的