1.service 是和当前应用的进程是一致的,而并不是在后台单独的线程运行,所以也就不能执行耗时操作,那么就必须在service中另起线程去执行耗时操作;
2.由于service和当前应用是同一个线程,那么如何实现跨进程通信呢,这时就需要AIDL;
3.service中onstartcommand()方法触发的条件是 startservice(),且在该方法中不应该有耗时的操作;
4.前台service 的目的是防止后台的service因为内存不足而被系统杀死,前台service会有对应的Notification,因此会在手机的状态栏下可以看见,实际的应用如音乐的播放,墨迹天气;
5.intent service 继承自 service ,intentservice 与 service 最大的区别在于,intentservice 内部会单独起一个worker线程去执行任务,onHandleIntent()方法中执行;
6.intentservice 的内部有 service Handler (继承自handler),Looper,.HanlerThread,具体的执行过程如下:调用startservice()方法会触发 intentservice 的onstartcommand()方法,进而触发onstart()方法,此时会通过serviceHandler发消息,消息的obj就是intent,消息发送给handler进行处理,在handlerMessage()方法中进而调用 onHandleIntent()方法,并且在handleMessage方法中会调用stopself()所以无需再自行调用stopself()。
7.关于service最重要的一项工作是 service的保活工作 ,主要应用场景 例如 推送服务