备注:之前Android入门学习的书籍使用的是杨丰盛的《Android应用开发揭秘》,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增加了很多的新组件,一直没有系统的学习过。现在开始这个“完善Android学习”系列,将2.2以后的新知识做一个概览。概览来自:
Android3.1平台(HONEYCOMB_MR1)。
API Overview
Animation framework
1)New ViewPorpertyAnimator class
新的ViewPropertyAnimatior类为开发者提供了一为View选中属性施加动画的方便途径,这个类自动化并且优化了属性的动画并且使得在一个View上同时发生的动画更加容易管理。使用该类是非常直接的,为了给一个View的属性施加动画,需要调用animate()方法为该View构造一个ViewPropertyAnimatior实例,使用它提供的方法指明需要对哪一个属性进行动画以及如何动画,举个例子,将View变成透明,就使用alpha(0),该对象负责配置底层的Animator类并且启动渲染动画;
2)Animation bacjground color:新的getBackgroundColor()和新setBackgroundColor(int)方法使得开发者可以获取动画的背景颜色,这只有在window动画中有作用,目前背景颜色必须为黑色,可以有任何的alpha数值;
3)Getting animated fraction from ViewAnimator
新方法getAnimateFraction()可以让你获取当前的动画片段——刚刚过去的动画帧;
UI Framework
1)Forced rendering of a layer:新方法buildLayer()让应用强制要求一个View的layer被创建,然后View立刻渲染到layer上,举个例子,一个应用可以在开始动画之前使用这个方法来强制将一个View渲染到layer上,这样就可以避免丢帧;
2)Getting a calendar view from a DatePicker:新的方法getCalendarView()让开发者可以从DatePicker实例中获取一个CalendarView;
3)Getting callbacks when views are detached:新的监听器View.OnAttachStateChangeListener让开发者在View添加或者移除的时候可以收到一个回调,可以使用addOnAttachStateChanegListener()来添加一个监听器。
4)Fragment breadcrumb listener,new onInflate() signature:onInflate(attrs, savedInstanceState)方法被废弃,使用新方法onInflate(activity,attrs, savedInstanceState)
5)Display search result in new tab:ACTION_WEB_SEARCH的EXTRA_NEW_SEARCH数据关键字可以让你在新的浏览器tab中打开一个搜索,而不是在本tab中;
6)Drawable text cursor:你现在可以使用新的资源属性textCursorDrawable指定一个图片资源文件作为文本光标;
Graphics
1)Helpers for managing bitmaps
setHasAlpha(boolean):用来指示是不是一个Bitmap中的所有的像素都有一个透明度值,诸如(RGB_565)的设置,这个调用是被忽略的,因为它不支持像素的alpha值,这是一个绘制提示,因为在一些情况中一个不透明的bitmap可以获得一个更快的绘制速度;
getByteCount():获得Bitmap的大小,单位:bytes
getGenerateId():让一个应用查看一个Bitmap是不是进行了改动;
sameAs(android.graphics.Bitmap):查看一个bitmap是不是和当前的bitmap在维度,配置以及像素数据上一样。
2)Setting camera location and rotation:Camera添加了两个新的方法rotate()和setLocation()来控制相机的位置。
Download Manager
1)Handling of completed downloads:a)应用现在可以初始化一个下载,只有当完成的时候才会提醒用户,为了使用这种类型的下载,应用需要传递一个VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION给请求对象的方法setNotifcationVisibility();b)新方法addCompleteDownload()让应用可以添加一个文件到下载数据库,以便于被下载应用管理;
2)Show downloads sorted by size:应用可以打开下载应用,按照下载文件的大小排序的模式查看,只要添加一个新的extra:INTENT_EXTRAS_SORT_BY_SIZE到一个ACTION_VIEW_DOWNLOADS intent;
Media
新的音频格式:媒体框架添加了对raw ADTs AAC的内建支持;
Launch controls on stopped applications
从Android3.1开始,系统的应用管理器开始追踪处于停止状态的应用并且提供方法给后台进程和其余应用启动它们。
注意到应用的停止状态和Activity的停止状态不一样,系统分开处理这两种情况。平台定义了两种新的Intent flags来让intent发送者指明该Intent是否要激活处于停止状态的应用的组件:
1)FLAG_INCLUDE_STOPPED_PACKAGES——将处于停止状态的应用的intent filter包含进来;
2)FLAG_EXCLUDE_STOPPED_PACKAGES——将处于停止状态的应用的intent filter不包含进来(从潜在的目标列表中移除那些停止的应用)
当没有或者两中FLAG都在一个intent中定义的时候,默认行为就是包括。
注意到系统给所有的广播都添加了FLAG_EXCLUDE_STOPPED_PACKAGES标签,它这样做来避免来自后台服务的广播无意间或者非必要的打开停止应用的组件。一个后台服务或者程序可以覆写该行为,加入FLAG_INCLUDE_STOPPED_PACKAGES。
应用在首次安装并且没有被打开的时候或者被用户手动停止的时候处于停止状态。
Notification of application first launch and upgrade
这个平台为第一次打开应用可应用升级提供了优化的通知提醒:
1)ACTION_PACKAGE_FIRST_LAUNCH:当一个应用第一次被启动的时候,发送给它,数据中包含包的名字;
2)ACTION_MY_PACKAGE_REPLACED:在一个新的版本被安装以后,通知一个应用它被更新了。这只有在应用被替代的时候才会收到,它没有包含任何的额外数据,为了收到它,为此声明一个intent filter。只有在应用不在停止状态的时候更新,intent才会被直接发送给该application;
Core utilities
1)LRU cache:新的LruCache类:让你的应用受益于高效的缓存,应用程序可以使用这个类减少计算或者从网上下载数据的时间。LruCache是一个维护者有限数目的值得强引用的缓存。每次一个值被访问,它就被移到队列切面,当缓存满了,队列最后的那个值就会被移除,然后可能被当做垃圾回收;
2)File descriptor as int:现在可以使用新方法getFd()或者detachFd()从一个ParcelFileDescriptor来获得一个文件描述符整数;
WebKit
1)File scheme cookies:
The now supports cookies that use the
file:
URI scheme. You can use to enable/disable support for file scheme cookies, before constructing an instance of
WebView
or CookieManager
. In a CookieManager
instance, you can check whether file scheme cookies is enabled by calling .
2)Notification of login request:
To support the browser autologin features introduced in Android 3.0, the new method notifies the host application that an autologin request for the user was processed.
Browser
浏览器增加了以下新特征来支持web应用:
1)支持视频播放,需要硬件加速支持;
2)Layer support for fixed position elements for all sites (mobile and desktop).
New Feature constants
这个版本添加了两个新的硬件特征约束:
1)android.hardware.usb.acessory:应用使用USB API和外围硬件设备互联,作为HOST出现;
2)android.hardware.usb.host:应用使用USB API和外围硬件设备互联,作为ACCESSORY出现;