您的位置:首页 > 移动开发 > Android开发

Android 8.0新特性调研

2017-04-06 20:43 489 查看
Timeline and updates



The O Developer Preview runs from 21 March 2017 until the final Android O public release to AOSP and OEMs, planned for Q3 2017.

Preview 1(initial release, alpha)———————目前的版本
Preview 2 (incremental update, beta)
Preview 3 (final APIs and official SDK, Play publishing)
Preview 4 (near-final system images for final testing)
Final release to AOSP and ecosystem

新功能:

Background Execution Limits

当一个应用程序在后台运行,会消耗系统有限的资源,比如RAM。这可能导致糟糕的的用户体验,尤其是当用户使用的是资源密集型的应用程序,诸如玩游戏或观看视频。为了改善用户体验,Android O强加对后台运行的应用程序的限制。主要有下面两个方面:

Note: These limitations apply only to apps that target Android O. Apps that target API level 25 or lower are not affected.

1.对Background Service 的限制

当一个应用程序在前台的时候,可以自由运行Foreground 和Background service。但是当应用程序切换到后台的时候,在开始几分钟所有的services都可以正常使用,过几分钟后,系统将会停止所有的Background service,就好比调用了Service.stopSelf( ) 。

在Android O之前,创建一个Foreground Service的方式通常是先创建一个Background Service的方式,再通过startForeground()的方式变为前台。但是在Android O中,如果应用程序运行在后台,那么静不能查创建Background Service,同时也就不能创建Foreground Service。出于这种考虑,Android O引入了一个新的方法:NotificationManager.startServiceInForeground(
)。调用这个方法就相当于startService( )在后台创建一个服务,然后立即调用的服务的startForeground( )方法使其变为Foreground。由于新的服务从未在后台,所以不受后台服务的限制。

2.对Broadcast 的限制

如果一个应用创建了一个广播接收器,每当这个receiver收到广播的时候,都会消耗系统资源。如果太多应用注册了某个系统事件的receiver,一个系统事件将会唤起所有的receiver,造成同时大量的系统资源被消耗,从而影响用户体验。为了解决这个问题,在Android N中添加了对广播的限制,在Android O这些限制更加严格了。

应用不能够再通过在AndroidManifest中声明广播的时候添加intent-filter来注册广播。
不管intent是显示还是隐式,都可继续使用Context.registerReceiver的方式注册广播。

Notifications

在Android O中重新设计了通知,这些更改包括:

通知渠道:Android O引入了通知渠道这个概念,可以为要显示的每种类型的通知创建用户可自定义的渠道。官方宣布的内容是“可以对特定通知进行分组”,而这些分组称作“渠道”(channel)。用户可以选择不同“渠道”的通知有不同的显示效果等等。

延后:用户可以让通知稍后再显示。通知重新出现,与他们第一次出现时的重要性相同。应用可以移除被延后的通知。

通知超时:使用Notification.Builder.setTimeout()创建通知时设置超时。使用此方法指定一个持续时间,在该持续时间之后,通知应被取消。如果需要,可以在指定的超时时间过去之前取消通知。

通知解除:系统现在区分通知是否被用户解除还是被应用程序删除。要检查通知是否被关闭,就应该实现NotificationListenerService类的newonNotificationRemoved()方法。

背景颜色:可以设置并启用通知的背景颜色,便于用户对不同的通知一目了然。例如,你可以为驾驶路线或正在进行的电话通知设置背景颜色。使用Notification.Builder.setColor()设置所需的背景颜色。这样做允许您使用Notification.Builder.setColorized()启用对通知的背景颜色的使用。

消息传递风格:使用MessagingStyle类的通知现在会以折叠形式显示更多内容,对消息相关的通知应该使用MessagingStyle类。还可以使用新的addHistoricMessage()方法向消息传递相关通知添加历史消息。





Figure 1. The screen on the right shows inline controls for notifications in Android O.

Working with fonts


Android O中允许将字体作为资源文件添加到res/font文件夹下面。这些字体文件会被编译到R文件中,在Android Studio中直接可用。使用这些字体的方式:使用@font/myfont 或者 R.font.myfont ,具体使用方法,请参考:https://developer.android.google.cn/preview/features/working-with-fonts.html



Autofill Framework


自动填充框架,用户可以选择可以自动填充的应用,在需要输入用户名和密码的时候会自动将这些信息填进去,主要用来存储和保护用户数据。

Picture-in-Picture mode


Android O允许activities启动PIP模式。PIP模式是一种特别的多窗口模式,主要用于视频播放。PIP模式在Android TV中已经可以使用,Android O开始可以在其他设备中使用。

当一个Activity处于PIP模式,那么此时它的状态属于暂停状态,但是会继续显示内容。因此,你必须确保你的应用的暂停播放的逻辑不应该出现在onPause( )中,而应该在onStop( )中,重新播放的逻辑在onStart( )中。

如果要使用PIP模式,需要在manifest中将  
android:supportsPictureInPicture
 设置为true。

Adaptive icons


Android中引入了自适应icon的功能,它的作用就是会根据不同的设备显示不同的icon。具体创建方法:https://developer.android.google.cn/preview/features/adaptive-icons.html

AnimatorSet


从Android O开始,
AnimatorSet
 API支持设定在某个时间点动画的位置以及能够反向播放动画,而不必创建两组动画。

Autosizing TextView


Android O中可以让文本内容根据家TextView的大小自动放大或者缩小。这意味着将更加容易去根据不同的屏幕和动态变化的内通来优化文本大小。具体信息,可以参考:

https://developer.android.google.cn/preview/features/autosizing-textview.html

Smart sharing



智能分享,Android O能够学习用户的分享偏好,更好地理解不同内容应该分享到的应用。比如说,如果用户拍了张收据的照片,Android O就会建议分享到一个跟开支相关的应用;如果用户拍了张自拍照,Android O就会推荐分享到社交媒体的应用中。Android O能够根据用户的个人喜好学习各种模式。
要启用智能分享,比如分享照片,需要添加一个拥有三个注解字符串的ArrayList 到intent中。这些注解应该描述清楚照片的组成部分与主题。下面有个例子展示如何给intent添加注解:


ArrayList<String> annotations =newArrayList<>();

annotations.add("topic1");
annotations.add("topic2");
annotations.add("topic3");

intent.putStringArrayListExtra(
    Intent.EXTRA_CONTENT_ANNOTATIONS,
    annotations
);

详细信息可以参阅:https://developer.android.google.cn/reference/android/content/Intent.html#EXTRA_CONTENT_ANNOTATIONS

WebView APIs


在Android O中提供了几个API来帮助管你WebView对象。这些API能够提升App的稳定性和安全性,包括一下:

1.Version API

To use this API, add the logic shown in the following code snippet:

PackageInfo webViewPackageInfo =WebView.getCurrentWebViewPackage();
Log.d(TAG,"WebView version: "+ webViewPackageInfo.versionName);

2.Google SafeBrowsing API

启用该安全措施,当用户试图打开一个潜在的不安全的网站的时候,会弹出一个警告。

To opt-in your Webview objects to check URLs against Google Safe Browsing's list of unsafe websites, add the following 
<meta-data>
 element
to your app’s manifest file:

<manifest>
    <meta-dataandroid:name="android.webkit.WebView.EnableSafeBrowsing"
               android:value="true"/>
    ...
    <application> ... </application>
</manifest>

3.Termination Handle API

这个API处理Webview对象的渲染过程死亡时的情况,不管是被由于急需内存而被系统杀掉还是还是渲染过程本神出现crash。通过使用这个API能够在渲染过程死亡的情况下应用继续运行。


4.Renderer Importance API

这个API的作用是个Webview对象设置优先级,当系统内存不足的情况下,优先级低的会先被杀死。

The following code snippet shows how to assign a priority to the renderer process associated with your app's Webview objects:

WebView myWebView;
myWebView.setRendererPriorityPolicy(RENDERER_PRIORITY_BOUND,true);


Cached data



在Android O中,为每个App直接分配一块空间用来缓存数据,如getCacheQuotaBytes(File).

当系统需要释放磁盘空间的时候,将会从超过其分配空间最多的应用开始删缓存的文件。因此,保持应用缓存的数据大小不超过所分配的空间时很有必要的。当系统要删除当前应用的缓存文件的时候,会首先考虑最旧的文件来删除。

有两个方法可以用来设置系统如何释放缓存的数据:

1.setCacheBehaviorAtomic(File, boolean)  用来表示一个目录以及目录下所有的内容作文一个整体来删除。

2.setCacheBehaviorTombstone(File, boolean) 用来表示不删除目录下的内容,保持文件的存在,只是清空文件里面的内容。

最后,当需要给一些大文件分配磁盘空间的时候,可以使用新的allocateBytes(File, long, int) API,它将会根据你的需求自动清理其他应用的缓存。使用 getAllocatableBytes(File, int)的方式来判断是否有足够的空间来存储你的数据,为不能使用getUsableSpace(
)。

Java programming language updates


Android O中添加了OpenJDK 8中的java.time 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: