1.service 与 Thread:
service运行在主线程当中,在service中执行耗时的操作同样会ANR。
Thread 的回收优先级比 service高,所以当内存不足的时候会优先回收Thread。
回收的优先级从高到低依次是 空进程,后台进程,服务进程,可视进程,前台进程。
2.远程Service:
声明service为远程进程,需要更改清单文件 android:process。
远程service 会独立运行在另外一个进程当中, 所以执行耗时的操作并不会阻塞主线程。
如果activity 与 service不在同一个进程当中, 而acitivty直接进行绑定service操作会崩溃,因为他们不在同一个进程当中。
如果想与远程的service 进行通信 就要用到 AIDL技术。
AIDL(Android Interface Definition Language)是Android接口定义语言的意思,它可以用于让某个Service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个Service的功能。
(1).android studio 需要new一个aidl文件,aidl 文件类似一个接口,定义接口中的方法。(需要注意: build之后这个aidl才可以使用)
(2).在service中创建 自定义的aidl类的子类 Stub ,重写接口中的方法,并实现。
(3).activity 创建ServiceConnection 类,并重写相关方法, onServiceConnection 方法中获取iBinder 对象,
(4).并通过aidl类的Stub的asinterface方法转成aidl类,之后就可以使用service中的方法了(以上只是在同一个项目中进行aidl , 实际开发中是跨应用去调取service的)