线程与进程
每个应用都是一个进程。(不太严谨,大概大概)
进程通信:
四大组件:Activity,Service,Content Provider,Broadcast Receiver
Activity
使用intent,start一个Activity,而这个Activity可能在另一个进程中。这个时候,再用上startActivityForResult 和 onActivityResult。就完成了当前进程和另一个进程的通信。
Service
一般service也就是本地Service。相应的还有远程Service,(remote service)。
本地Service和应用同在一个进程里,并且是主线程的?
远程Service则运行在一个独立的进程中。
AIDL , Android Interface Definition Language。跨进程,进程A得知进程B的接口(即方法),才可以调用,传递参数,获取返回值。
Content Provider
当需要对外提供数据,其它应用都可以获取到。而Content Provider也是对Sqlite的另一种封装而已,同时,它提供了另一种访问数据的方式。
在不同应用中共享数据,即完成进程通信。
Broadcast Receiver
应用A发送一个广播,其它应用在注册监听这个广播之后,就可以接受到这个广播。
Bound Service
从创建 Bound Service 开始。一般咱们使用 bindService 来获取一个 iBinder 对象,然后通过 iBinder 对象来与 Service 进行通信。
Binder
在Service里的onBind()方法中,返回一个Binder对象,在其他组件中通过bindService()来获取这个Binder对象,就可以和Service进行交互了。
这个不算跨进程。
进程中可以有多个线程。
应用中的多线程操作:
1. Handler机制
2. AsycTask-即对Handler,MessageQueue, Message, Looper的封装。更便已使用。
3. RxJava-响应式编程。利用观察者模式,完成多线程通信问题。Scheduler相当简洁的解决了线程切换的问题。