android中,电话的两个核心类就是call.java与Phone.java了,这两个类,call是abstract class,Phone是interface。google这样设计自然有其理由的,下面我结合自己的理解来简要的分析下,为什么call用抽象类,Phone用接口来实现。

android在中间层的telephony有两套机制,一套是GSM,一套是CDMA。自然基本上所有的实现都有两条路径了。选择哪种实现,是RIL读取的网络制式决定的,当然你也可以在framework自己指定。这两套机制,各有自己的call与Phone。它们决定了call与Phone的不同实现方式。

OK,我们先来了解下抽象类与接口的区别。一句话,抽象类是模板,接口是规范。

模板是什么,模板就像我们经常填写的请假单,试卷,报名表。。。它们把不变的东西取出来,因为那些每个人都是一样的,然后你可以自己复写你自己需要改变的东西,这样它就成了你自己的了。call类也是如此,GSMCall与CDMACall的实现大部分是一致的,这样的话,定义一个模板类然后继承它实现两个子类,这样子类要复写的代码就很少了。当然,这不是需要用继承的唯一理由,因为这用接口也可以实现的,虽然需要写的代码更多了些。我们用继承,需要考虑的最重要的一点是,我们需不需要向上转型。call类明显是需要的,因为我们在上层根本没有用到GSMCall与CDMACall,我们用到的都是call,上层是不需要管中间层的实现的,这样其实就是一个向上转型的过程了。因此,call用抽象类比接口好。

下面我们来了解下Phone为什么用接口来实现。

接口是什么?接口是规范,什么意思,接口就是规则,就相当于60分及格一样,你60分以上,你就及格了。那么60分及格就是一套规则。只要任何人实现了这个规则,那么他就及格了。其实Phone就是一个规则,因为我们使用的GSMPhone与CDMAPhone,它们的本质都是handler,但是它们都实现了Phone接口,也就是说,它们都具有Phone的特性。由于它们继承自handler,也就是说,它们不能再继承与抽象类Phone了,而且,由于Phone有代理类,它们也不需要向上转型。这样,接口相对于抽象类的更灵活的优势,选择接口肯定是比抽象类好的。

以上,是我对着两个类的简单实现分析,个人愚见,欢迎拍砖

更多相关文章

  1. android中SELINUX规则分析和语法简介
  2. Android开发实践:Android.mk模板
  3. Android多语言支持以及各国语言Values文件夹命名规则
  4. Android中回调接口的使用介绍
  5. Android proguard(混淆)模板
  6. android调用系统的分享接口
  7. android post请求接口demo
  8. Android 实现序列化:Parcelable和Serializable接口的用法

随机推荐

  1. android如何在xml中引用内部类的View
  2. android Ble4.0蓝牙开发之搜索慢、startL
  3. Android两个apk源码进行整合
  4. 赏析 WIMM 可佩戴式平台,很帅很强大
  5. Android属性动画,看完这篇够用了吧
  6. Android(安卓)桌面组件【app widget】 进
  7. Android(安卓)多主题切换 (theme + style
  8. Android传感器概述(二)
  9. Android(安卓)-- Parcelable 序列化操作
  10. Android(安卓)UI编程进阶——使用Surface