Android:Service 总结

Service是android的四大组件之一,相对与Activity,他没有界面,可以在后台运行。

问题1:service是跑在主线程还是子线程?
主线程,因此如果有长时间的操作,会导致anr。耗时的操作最好在service再起一个子线程。

问题二:service有几种启动方式,区别是什么?
service有两种启动方式,startservice和bindservice。
区别:
生命周期:
startservice启动服务,通过stopself或者外部调用stopservice结束。
bindservice启动的服务,通过unbindservice来结束。

问题三:onstartcommond有几种返回值,分别代表什么含义?
有三种返回值:
START_STICKY:代表service被杀掉后,会重启,但intent为空。但崩溃两次之后就不回再重启了,另外用force-stop应用也不回重启service。

07-29 14:57:22.003  1026  3131 W ActivityManager: Service crashed 2 times, stopping: ServiceRecord{e334c4a u0 com.example.wenfengtou.firstmacapp/.MyService}this is not core appcom.example.wenfengtou.firstmacapp

START_NOT_STICKY:代表service被杀掉了,不会重启
START_REDELIVER_INTENT:代表service杀掉后,会重启,还会重新传递intent。

Service如何保活

1.OnstartCommand返回值
2.前台service。
3.守护service。

JobService是什么?

有系统统一管理的一种Service,在某种条件下触发

InstentService是什么?

1.例如HandlerThread来实现的一个创建了子线程的Service,因为一般Servie跑在主线程的,所以创建了这么一个类用来搞一些耗时的操作。
具体实现是,在oncreate中创建一个子线程,启动一个looper。在onstartCommand中,将intent包装到msg中发送,然后在handlerMessage中回调onHandleIntent方法。我们只需要实现onHandleIntent方法即可,在这个方法内多耗时的操作都能做。
在onHandleIntent中处理食物。
2.不要使用bind方法,因为onstart不回掉。
3.消息处理完,服务会马上stopself。

你可能感兴趣的:(Android:Service 总结)