Android O 新特性(开发者视角)

在前不久的Google I/O 2017大会上,谷歌为我们带来了Android O版本,相比于上一个版本Android N版本,O又多了很多新的特性,比如画中画、通知栏修改、自适应图标等。不过,作为开发者们,似乎更关心这些新特性更细节的部分,比如在代码上该如何支持、Api有哪些新的变化等等。本次我们先概要的谈谈这些新特性,今后的章节中我们将一个个深入探讨这些新的功能。

1. 画中画(Picture in Picture)

从Android O开始,画中画将支持手机端系统,如下图中在主界面上的正在播放视频的NetFlix小窗。

画中画

在开发中,若想要让App支持画中画,首先你需要在AndroidManifest.xml文件中声明android:supportPictureInPicture="true",并且在Android O中你不再需要声明android:resizeableActivity="true"

<activity android:name=".MyappActivity"
    /* android:resizeableActivity="true"     这一行不再需要*/
    android:supportPictureInPicture="true"
    android:configChanges="..."
/>

然后,在你的代码中,可以通过如下形式的代码进入画中画模式:

public void onActionClicked(Action action) {
    if (action.getId() == R.id.start_myapp) {
        getActivity().enterPictureInPictureMode();
    }
}

2. 媒体文件(Media)

安卓在media包中已经内置很多有用的类,如MediaPlayer,MediaRecorder,MediaCodec,MediaExtractor等,Android O中为每个这些类添加了一个getMetrics()方法,它能帮你获取你当前处理的媒体对象的具体信息,如分辨率、编码、比特率、持续时长等。如以下代码片段所示,在PersistableBundle对象中可以获得详细信息。

MediaRecorder recorder = new MediaRecorder();
// ...
PersistableBundle metrics = recorder.getMetrics();

此外,媒体的回放功能上,增强了缓存控制功能,你可以指定一个高位标志(high watermark)和一个低位标志(low watermark),标志位既可以通过时间也可以通过大小来指定,媒体只有当到达低位标志时才会开始回放,并且系统会尽量缓存在高、低位标志之间的媒体数据。
对媒体对象的定位(seek)功能也得到了加强,你现在可以定位到最近的frame、下一个keyframe、上一个keyframe或者最近的sync frame。

3. Web视图(WebView)

WebView新增了一些非常有用的API,可以使用和chrome浏览器类似的API来实现对恶意网站的检测来保护web浏览的安全性,为此需要在manifest中添加如下meta-data标签:

<manifest>
    <meta-data
        android:name="android.webkit.WebView.EnableSafeBrowing"
        android:value="true" />
    <!-- ... -->
</manifest>

WebView还增加了关于多进程的API,可以使用多进程来增强安全性和健壮性,如果render进程崩溃了,你还可以使用Termination Handler API来检测到崩溃并做出相应处理。

4. 自动填充(Autofill)

Android O增加了自动填充的功能,当有需要填充的表单时,系统会列出之前已经填充过的表单。开发时你可以实现一个Service来提供cache以及提供cache数据,标准视图组件(如TextView)自己知道如何和Service交互来获取缓存的表单,如果是自定义视图,也有对应的API来提供其和缓存表单的交互。

自动填充

5. 字体

Android O中让使用自定义字体的方式变得更加简单高效,在res目录下直接增加了一个新的font目录,其中就可以存放第三方字体文件,也可以用xml的形式声明font family,使用时直接通过R.font.myfont就可以引用,如下图所示:

字体

6. 自适应TextView(Auto-Sizing TextView)

Auto-Sizing TextView能够根据TextView的特性和边界自动缩放和重新布局其中的文本,这使得在不同像素密度的屏幕上对TextView的现实得到了优化。

Auto-Sizing TextView

同样,要使用这个特性也非常简单,在最新的support libraries中就包含了这些特性,只需要在布局xml中声明TextView的相应属性即可,如以下代码片段:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:autoSizeTextType="uniform"
    android:autoSizeMinTextSize="12sp"
    android:autoSizeMaxTextSize="100sp"
    android:autoSizeStepGranularity="2sp"
/>

7. findViewById()

在编写android代码时,最常用的一行代码应该就是findViewById(int id),然而这个方法的返回值是View类型,你必须对其进行强制转换以得到自己想要的类型。但是现在,在Android O中,你可以省略掉强制转换的步骤了,开发者将其称为Castaway,虽然这个改动是个很小的变化,但是确实能让你少敲很多无聊冗余的代码。

findViewById

8. 自适应图标(Adaptive Icons)

新特性Adaptive Icons让你能够在不同的设备上显示不同形状的启动图标,例如在一种设备上显示圆角矩形图标,而在另一种设备上使用圆形图标,其原理是不同的设备OEM提供不同的遮罩(mask),系统就使用这样的mask来截取出不一样的图标。

Adaptive Icon 1

Adaptive Icon 2

9. 通知渠道(Notification Channels)

Android O 引入了通知渠道,以提供统一的系统来帮助用户管理通知,用户可以对同一个应用的不同类型(或者说不同优先级)的通知采取不同的措施。
Android O 弃用了为单个通知设置优先级的功能。现在,创建通知渠道时您可以设置建议重要性级别。您为通知渠道指定的重要性级别适用于您发布至该渠道的所有通知消息。您可以为渠道配置五个重要性级别中的一个,这些级别配置的是渠道可以打断用户的程度,范围是 IMPORTANCE_NONE(0)IMPORTANCE_HIGH(4)。默认重要性级别为 3:在所有位置显示,发出提示音,但不对用户进行视觉干扰。创建通知渠道后,只有系统可以修改其重要性。

10. Java语言

Android O中为新增了一些Java语言的包:

  • java.time
    让操作时间、日期、时长等对象变得更加容易,让操作路径和文件更容易
  • java.nio.file
    对旧的java.ioAPI做出了新的改进
  • java.lang.invoke

如下代码展示了新的file API如何操作文件:

Path path = Paths.get("...");
String uncommented  = Files.lines(path)
    .map(l -> l.trim())
    .filter(l -> l.length() == 0 || l.charAt(0) != '#')
    .collect(Collections.joining("\n"));

后记

Android O还有许多有用的新特性这里没有列出来,如生命周期等,而且上文中讲的也只是粗浅的介绍性质的,今后我会更具体介绍一些重要的新特性。
关于更多Android O的内容,可以参考官方开发者文档 https://developer.android.com/preview/index.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容