【问题标题】:As the IntentService complete its job. is it possible to start another thread from UI thread but not from activity?随着 IntentService 完成其工作。是否可以从 UI 线程而不是活动启动另一个线程?
【发布时间】:2016-07-15 05:00:20
【问题描述】:

IntentService 有自己的线程,从 handleIntent 启动另一个线程,服务被认为是活动的或已完成的服务,不管另一个线程是否处于活动状态? 并且一旦 IntentService 完成其工作,是否可以返回主线程并调用另一个线程,但是另一个线程的启动可能来自主线程而不是来自活动,因为服务可以在任何活动活动期间完成其工作.

【问题讨论】:

    标签: android multithreading android-intentservice


    【解决方案1】:

    IntentService 有自己的线程,从 处理意图

    永远不要那样做。一旦IntentServiceonHandleIntent() 方法返回,服务就被销毁,进程也很可能被杀死。 Android 不知道您启动了哪些线程,因此它只知道您的进程处于空闲状态并浪费资源。

    如果您需要在完成IntentService 后“开始”其他内容,请使用startActivity()startService()sendBroadcast()(以合适的为准)。同样,Android 不知道您的线程。

    如果您需要过程调用语义(例如,启动服务,让它执行一些任务,然后将控制权返回给调用者),IntentService 不是正确的工具。使用绑定服务(如果需要跨进程边界,则使用绑定 AIDL 服务)。

    【讨论】:

    • 谢谢,我得到了第一部分,一旦 IntentService 完成它的工作,接收到适当的数据,我需要启动另一个线程,重点是我需要从主线程开始的第二个线程,但我不希望 IntentService 完成的接收者成为活动,因为 IntentService 的完成可能在任何活动活动期间,我想要一个可以处理 IntentService 完成的全局位置,我可以在其中启动另一个线程.
    • 不要那样做。你永远不应该从IntentService 创建线程。我在这里帮不上什么忙,因为您只是在发表诸如“我需要从主线程开始的第二个线程”之类的声明,而没有解释原因。
    • 好吧,关键是我使用了实现下载机制的库,但是在开始第二个之前我需要获取资源,一旦我收到结果就启动 2_n 线程(它处理下载机制)并考虑到即使我离开活动,第一个线程也应该继续它的工作。这就是为什么我想使用 IntentService 任何建议都会有所帮助,谢谢
    • 这并不能解释为什么你需要从“主线程”运行任何东西。
    • 我使用 Glide 并使用 Glide 只缓存图像,不显示,问题是它只允许从主线程调用。
    猜你喜欢
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 2018-12-08
    • 2021-02-05
    相关资源
    最近更新 更多