将模块service化的好处

蓝牙的所有操作最好都封装成一个service,好处是相对独立,作为一个service组件,可以指定所运行的进程,所有实现彻底和外部解耦,不管是同进程还是跨进程调用对外接口是不变的。因为APP中可能拆分成多个进程,这些进程对service的访问是统一的,不管和service是不是在同一个进程。另外放在一个service里可以保持数据只有一个操作对象,调用方来自多个进程,但是最后操作数据的只有service进程本身。如果没有service化,只对外提供一个接口,那么操作数据的进程可能有多个,会出问题的。还有一个好处是service作为一个组件即使APP在后台系统也不会轻易杀掉进程,如果接口没有依托于任何组件,则当APP是空壳时很容易被杀掉。

如果不这样做,会出现的问题是,如果APP拆分成了多个进程,那样对外接口也需要改动成支持跨进程的,包括传输的数据是否支持跨进程也要考虑。比如之前要返回gatt,如果是同进程这个gatt进程内传递是没有问题的,但是现在跨进程是无法传递gatt的,因为既没有实现parcelable也不是Binder。接口改动后第三方也要跟着改动,这是很麻烦的。

总结一下,以后这种比较独立的模块最好都放在一个service中,并且要预想到可能会支持跨进程的。这种service化可拓展性、稳定性和灵活性都会更好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章