【问题标题】:Intent Service stays open after app closed应用关闭后 Intent 服务保持打开状态
【发布时间】:2014-07-15 20:30:53
【问题描述】:

我创建了一个应用程序,如果两个值不同步(例如 3 个中的 2 个),则该应用程序需要在应用程序关闭时运行意图服务。意图服务更新我的应用程序中的文本视图,该视图将使用广播接收器显示这两个值。

同样,意图服务是在一个活动中创建的,但应该在另一个活动中停止。这两个值基于 GPS 位置更新和通过 Web 服务方法发送的位置。在某些时候,GPS 可能会更新位置,并且 Web 服务可能不会由于与移动数据/wifi 的连接受限,因此使值失衡(1 of 3),如果用户关闭应用程序,则需要持续运行,直到值达到3 of 3(应用程序关闭时 GPS 停止更新)。

即使应用程序已关闭,意图也应一直运行,直到值再次同步。我将如何在应用程序关闭时保持它运行,然后在值同步时停止它

【问题讨论】:

    标签: android intentservice


    【解决方案1】:

    因为 IntentService 就像一个线程。它被设计为在完成 onHandleIntent() 所需的时间内运行。

    如果您想管理生命周期,请使用常规服务并使用 stopService 或 stopself() 对其进行控制。

    编辑:顺便说一句,你为什么要混合 asynctask 和 intentservices 呢?使用其中一种,但不要混合使用。 AsyncTask 处理所有。 mainUI 中的后台线程和处理。无论如何,对于使用 GPS,您应该决定使用常规服务并(也许)在服务 onStartCommand() 中创建一个线程。

    【讨论】:

    • AsyncTask 用于运行 Web 服务方法,但一旦应用程序关闭活动,它就会停止。在 IntentService 中运行它允许我在所有活动中使用它,并且当整个应用程序完成更新(即 3 of 3)时我可以停止它。GPS 在常规服务中运行,而 WebService 方法在 IntentService 中。 onHandleIntent 在更新完成时结束,即 3 of 3 或者它应该在更新完成时结束
    • 然后使用 IntentService 运行您的 web 服务,而无需额外的 asynctask,这在您的情况下似乎毫无价值。 IntentService 将在完成所有操作时运行。为什么不等到收到 onLocationChanged 并更新您的 Web 服务?保持打开状态直到您收到一个新位置(至少 3 个)根本没有意义。
    • 这就是我正在做的 3 of 3 只是一个例子。该应用程序应该是 1 of 1、2 of 2 等,但有时由于缺乏与网络的连接,无法进行 WebService 更新并且应用程序将变得不同步,即 1 of 2、2 of 3。用户应该仍然能够离开应用程序,它应该更新,直到值相等。 GPS 更新在用户离开应用程序时结束。因此,如果用户有 5 次 GPS 更新并离开应用程序,这将不再更新。如果网络服务更新不同步,请说 1。这应该会更新,直到达到 GPS 编号(5 个中的 5 个)
    • 这不是真的。只要您保持服务运行,该服务就会运行。使用常规服务和 RETURN_STICKY。如果 GC 想要杀死它,它会在它有足够的资源可供服务使用时回来。在服务中,您验证 a) 同步状态和 b) 接收到的 GPS 位置的计数。将其存储在本地并在服务 onStartCommand 再次执行时重新读取它(当它被 GC 杀死时)
    • 我的 GPS 服务运行正常我已经为 GPS 编写了代码,以便在用户离开应用程序时停止。我的问题在于 Web 服务方法。我希望它一直运行到它等于 GPS。我在使用常规服务时遇到的问题是它从一项活动开始,并在更新完成后以另一项活动结束。这需要一个 TextView 在两个页面上显示这些更新,我认为使用广播接收器在两个页面上显示更新将是最简单的方法。我不能从 IntentService 实现 onStartCommand 吗?
    猜你喜欢
    • 1970-01-01
    • 2023-04-11
    • 2021-07-17
    • 1970-01-01
    • 2013-10-21
    • 2011-05-25
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多