最近看面试题,看到
IntentService有何优点
:
1Activity的进程,当处理Intent的时候,会产生一个对应的Service;
2Android的进程处理器现在会尽可能的不kill掉你,
3非常容易使用
个人认为不够准确,首先IntentService本身就是一个Service,就是Service的一个扩展,
在onCreate()时,新建了一个线程,和一个Handler,将这个Handler的消息处理放在了这个线程中。最近这个Handler接收到消息,调用onHandleIntent()方法,也就是我们使用IntentService所必须要实现的一个方法。
在onCreate()中初始化Handler机制,并且自己定义了一个线程,这样就运行在了子线程中,避免阻塞,出现ANR。
在Service启动后,发送消息给Handler.
Handler接收到消息,由于是顺序执行,我们处理完之后,调用stopSelf(msg.arg1)方法,用来停止这个Service,在onDestory中,中止Looper
<-------------------->
第二点,Android的进程处理器现在会尽可能的不kill掉你,service作为一个后台服务,如何避免被KILL掉?通常,有很多后台进程在运行,系统会将它们放入到LRU(Last Recent Used,最近使用)列表中,用来决定:最近使用过的最后被KILL,而很长时间没使用过的,将会被第一个KILL掉。 也就是保证一直在用。
所以在这里有一点疑惑,这是不是说明IntentService与Service在系统KILL的时候并没有提升优先级?IntentService是执行完后主动去Kill掉服务,而Service是被动由系统KILL呢?
所以我认为它的优点应该是:
1.内置了Handler机制,在onHandleMessage中进行耗时操作,避免阻塞,出现ANR的现象。
2.服务工作完成后,主动关闭服务。优化了Service,优化了内存。
3非常容易使用,因为我们可以在onHandleMessage中直接写耗时的操作,而不用担心阻塞的问题。