关于support library那些事
android开发中不可避开的一个事情,就是support library的引用。
Google官方文档,建议一直使用它。
网上的资料对这个东西的解释,也是为了兼容旧版本设备。
本来我以为这只是个入门问题,大家不讨论都是觉得没必要讨论。
经过一番调查发现,实际上没人说得清楚为什么要使用它,为什么不使用它,这东西在开发sdk里到底占居一个什么位置,它里面的实现跟原生提供的机能有什么区别。
任何OS的升级,除了提供新的机能外,就是原声api的增加了,既然是新追加的api,如果使用了这个api,那么在旧版本的os上自然是无法运行,如果又想在旧版本os上能够支持新的特性怎么办?当然是在旧版本原声api基础上再模拟一套新特性了。support library干的就是这种事情。
既然support library是基于一个旧版本的os扩展开来的,那么到底是哪个版本,必须有个基准。
比如现在最常用的一个版本SUPPORT V7(注意这里的V7并不是support library的版本,V7代表的意思是基于os的哪个版本做成的,support library经常升级添加新特性,只要基于的os版本不变,这个V7号也是不会变)是基于os 2.1作成的,那么在版本在2.1以上的所有机子都可以用。
那么问题来了,如果我只想做一个支持os 4.0以上的app,而且os 4.0提供的api足够我用了,我为什么还要用support library?因为比如SUPPORT V7,它的内部实现已经确定了,我使用它运行在os 2.1和os4.0上没啥区别。
按照有些网友的解释,好像support library里也会提供一些原生api不提供的东西,太搞笑了,如果作为原生api的扩展,为啥非要放到这个包里?
对于高版本的os,同样的api,有两份,一份是原生实现,一份是由support library实现的。而且官方也建议不管min version是哪个版本的程序,最好使用support library,那么拜托,你还升级os干嘛,只升级support library不就好了?support library在高版本的os运行时会切换调用原生api么?
根据以下stackoverflow上的回复
一般情况下,不会调用原生api,不管你是在哪个版本的os上运行,只要使用了support library,那么就是使用了它的实现。
但是根据这个stackoverflow上的回复
http://stackoverflow.com/questions/11641669/how-android-support-library-work
在高版本的os运行时,会切换到原生api的,甚至连内部消息都出来了(看Jose L Ugia的回答),我真是醉了。
我最后只想说,贵圈真tmd乱。