【问题标题】:Android (API 28) - Receiving implicit intents in backgroundAndroid (API 28) - 在后台接收隐式意图
【发布时间】:2020-02-09 20:48:07
【问题描述】:

我对当前 Android 后台服务的可能性感到非常困惑,需要专家的帮助:)

“xDrip”应用程序通过(我猜是隐含的)意图广播其信息,其动作名称为“com.eveningoutpost.dexdrip.BgEstimate”。我想收到这些意图。由于不允许将它们放入清单中,因此我在应用程序类的 onCreate() 方法中动态注册了它们。只要应用程序正在运行(即使应用程序未在屏幕上打开),它就可以很好地工作。但是,如果我在应用程序概述中将其滑开,即使我没有取消注册意图,它也不会再收到意图。

我现在的问题是:始终可靠地接收此(隐式)意图的最合适方式是什么?当用户在应用概览屏幕中将应用滑开时也是如此?

干杯!

【问题讨论】:

  • 运行一个前台服务来让你的应用保持活跃,没有什么可以解决的。

标签: android background-service android-implicit-intent


【解决方案1】:

只要应用程序正在运行(即使应用程序未在屏幕上打开),它就可以很好地工作。

更准确地说,只要您的进程正在运行,它就可以很好地工作。

但是,如果我在应用程序概览中将其滑开,即使我没有取消注册意图,它也不会再收到意图。

更准确地说,一旦您的进程停止运行,您就会停止接收广播。请注意,当您在后台时,即使没有手动将您的应用滑出概览屏幕,这也会自然发生。

始终可靠地接收此(隐式)意图的最合适方法是什么?

从技术上讲,这是不可能的。

如果您使用前台服务,您将获得接近,以使您的进程保持更长的时间。然而:

  • 用户仍然可以将应用程序从概览屏幕上滑出,这仍可能会停止您的服务并终止您的进程

  • 即使是具有前台服务的进程也可能在很长一段时间后被 Android 自动终止

  • 您的应用将一直消耗系统 RAM,用户可能会也可能不会喜欢

【讨论】:

  • 感谢您的详细信息!我有一些后续问题:我使用一个医疗应用程序通过我的 Android 手机上的蓝牙接收葡萄糖值。这个应用程序有一个持续的低优先级通知。 (我猜这是前台服务的结果?!)我测试通过关闭应用程序来停止进程并继续运行。这是如何运作的?或者有没有办法在进程终止后自动重启应用程序?
  • @JUehV:“这是如何工作的?” -- 他们可能在与 UI 不同的进程中提供服务(通过清单中 <service> 上的 android:process 属性)。但是,不要以为这会在所有设备上解决此问题,因为设备制造商有时会修改这种“将应用程序关闭”的行为,并且可能会采取措施确保即使是单独的进程也会被终止。
  • @JUehV:“或者有没有办法在进程终止后自动重启应用程序?”——不是真的,因为太多的开发者滥用了这种东西。
  • 好吧,前台服务好像已经够好了:) 非常感谢!
猜你喜欢
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 2023-03-03
  • 1970-01-01
  • 2019-07-24
  • 1970-01-01
相关资源
最近更新 更多