IntentService

  • IntentService是Service的子类,它增加了额外的功能。

    -Service 本身存在的问题,它自身不能开启线程,Service所有应用都运行在主线程。

  • 因此不能在service中执行耗时动作,因此,如果要处理耗时任务,则需要

  • 开启另外一条线程来处理
  • 疑虑:既然服务自身不能开启线程,那么和在其他地方开启线程有什么区别那?
  • 原因:
  • 因为Activity可能被用户退出,BroadcastReceiver的生命周期也很短。由此,
  • 可能出现的情况是,子程序还没有运行结束的情况下,Activity 已经退出,
    -或者 BroadcastReceiver 也结束了,此时它们所在的进程就成了空进程,

  • 系统在需要资源的时候会优先该进程,宿主进程结束了,

  • 该进程中的所有子线程也会被终止。任务无法完成。
public class MyIntentService extends IntentService {
    /** * Creates an IntentService. Invoked by your subclass's constructor. * * @param name Used to name the worker thread, important only for debugging. */
    /* * Service不会专门启动一条线程,Service与所在的应用在一个线程之中,因此不可以在Service中直接执行耗时任务。 * Android专门提供了一个IntentService类,这个类就很好的解决了忘记在服务中开启线程,任务结束后关闭线程。 * */
    public MyIntentService(String name) {
        super(name);
    }


    @Override
    protected void onHandleIntent(Intent intent) {
        //这个方法是在子线程中运行
        //IntentService会创建单独的worker线程来处理所有的intent请求,开发者无需处理多线程问题
        //当所有请求结束后,服务会自动停止
        //为onBinder方法提供了默认实现,默认返回空
        //为onStartCommand方法提供了默认实现,该实现会将Intent添加到队列

    }

你可能感兴趣的:(service)