【问题标题】:Trying to start already running service in background thread试图在后台线程中启动已经运行的服务
【发布时间】:2019-07-06 06:27:46
【问题描述】:

我想为一个长时间运行的位置获取任务启动一个服务。 我已选择为此任务使用前台服务。我希望此服务在后台线程中运行。

现在,经过一番搜索,我决定在服务的onStart()而不是活动本身中启动一个新线程。我不希望线程引用 Activity 时出现任何内存泄漏。 Activity 被销毁我很好。

我的问题是,onStartCommand() 是在哪个线程上调用的?当我尝试再次启动服务时会发生什么?

在线程方面我不是很有经验,请指出我遗漏或错误的任何地方。

【问题讨论】:

    标签: android performance android-service android-thread


    【解决方案1】:

    onStartCommand 总是在主线程上调用。如果你想在另一个线程上运行代码,你必须在你的服务中创建它。服务默认不创建线程(例外:IntentService 将创建一个线程,并从该线程调用 onHandleIntent)。

    一次只存在一个服务实例。再次启动它不会创建新的 Service 对象,但它会以新的意图再次调用 onStartCommand。如果您不希望创建两个线程,您必须自己阻止它。通常保持对线程的引用,如果不为空则不创建它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多