android的call与Phone的实现分析

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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lindir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值