MaterialDesign
设计风格ART
虚拟机5.0中使用了recyclerview
代替了listview
,它具备高度解耦,能够自定义样式,提供ItemAnimator,ItemDecoration,LayoutLinearLayout
实现丰富多样的效果,但也有缺点,好比须要自定义列表分割线,列表点击事件也须要本身实现,列表分隔线经过继承recyclerview的ItemDecoration
方法安全
Notification Channels
通知渠道是由应用自行定义的通知内容类别,借助渠道,开发者可让用户对不一样种类的通知进行精细控制,用户能够单独拦截或更改每一个渠道的行为,而不是统一管理应用的全部通知。 建立通知渠道的步骤:
NotificationChannel
对象,并设置应用内惟一的通知 ID。NotificationManager
中注册通知渠道对象PIP
Android O
现已支持 Activity
的画中画模式。PIP 是一种多窗口显示模式,多用于视频播放,即你能够一边发微信一边看视频。
PIP
模式不会改变 Activity 的生命周期。在指定时间只有最近与用户交互过的 Activity 为活动状态。 该 Activity 将被视为顶级 Activity。 全部其余 Activity 虽然可见,但均处于暂停状态。当一个 Activity 处于 PIP
模式时,其实它是出在暂停状态,但其内容会继续展现。API
变动 在 Android O
中新增 PictureInPictureArgs
对象来指明你的 Activity 在 PIP 模式中的属性,好比长宽比等。 Android O
还新增了如下方法来支持 PIP。
(PictureInPictureArgs args)
:将Activity置于 PIP
模式之下。Activity.setPictureInPictureArgs()
:用于更新 Activity 在 PIP
模式下的设置。若是 Activity 正处于 PIP
模式之下,那么更改的属性将当即生效。Adaptive Icons
Android O 支持建立自适应图标,系统能够基于设备选择的蒙版将这些图标显示为不一样形状。系统还将实现与图标的自动交互,并在启动器、快捷方式、设置、共享对话框以及概览屏幕中使用它们。 在之前的 Android 版本中,图标大小定义为 48 x 48 dp。如今你必须按照如下的规范定义你的图层大小:
Pinning shortcuts
Pinning shortcut
s 是一个比 APP shortcuts
更小的快捷方式,放置于桌面上,用于更快速的打开某一 APP 的某单一任务。Pinning shortcuts
在桌面上可呈现不一样的图标显示。
isRequestPinShortcutSupported()
方法校验手机是否支持启动这种快捷方式。ShortcutInfo
对象。Android 7.0
开始,就优化了Android通知栏的体验。Android P还增长了许多对通知的支持,在P当中,又新增了下述功能:
setData()
来显示图像。Notification.Person
类用于标记参与聊天的人,包括他们的头像和URI。还有其余的一些API,如今都用Person类做为标志参数而不是CharSequence
。 Notification.Builder builder = new Notification.Builder(this, "a"); //新的聊天对象 Notification.Person p = new Notification.Person(); //在MessagingStyle中用Person代替了以往的CharSequence Notification.MessagingStyle messageStyle = new Notification.MessagingStyle(p); Notification.MessagingStyle.Message message = new Notification.MessagingStyle.Message("aaa", 100, p); //能够显示图像了 message.setData(); messageStyle.addMessage(message); builder.setStyle(messageStyle); Notification notification = builder.build();EXTRA_REMOTE_INPUT_DRAFT
来获取一些信息。 肯定对话是不是群组对话:您可使用setGroupConversation()
来有目的地将对话标识为群组对话或非群组对话。 为意图设置语义动做:setSemanticAction()
方法容许您为某个动做提供语义含义,如标记为读取,删除,回复等。Android O
引入了Notification Channels
,可以让您为要显示的每种类型的通知建立一个用户可自定义的频道。 Android P经过如下更改简化了通知渠道设置:
isBlocked()
方法来肯定某个组什么时候被阻止,不对被阻止的组发送消息。 此外,应用可使用新的getNotificationChannelGroup()
方法查询当前渠道设置。NotificationManager.Policy
有两个新的策略常量:PRIORITY_CATEGORY_ALARMS
(按优先级排列)和PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER
(优先排列媒体,系统和游戏声音)Android P
新增了ImageDecoder
类,为解码图像提供了一种更优的方法。由此能够用ImageDecoder来替换BitmapFactory
和BitmapFactory.Options
。更多使用方法请参见官方API。 String filePath = "test"; File file = new File(filePath); ImageDecoder.Source source = ImageDecoder.createSource(file); ImageDecoder.decodeBitmap(source); ImageDecoder.decodeDrawable(source, (imageDecoder, imageInfo, source1) -> { //裁剪图像 imageDecoder.setCrop(); //调整大小 imageDecoder.setResize(); }); BitmapFactory.decodeFile(filePath);AnimatedImageDrawable
类来绘制和显示GIF和WebP动画图像。 AnimatedImageDrawable
与AnimatedVectorDrawable
相似,由于AnimatedImageDrawable动画也是基于RenderThread
工做的。RenderThread
自己在内部使用工做线程进行解码,所以解码不会干扰RenderThread
。 这种实现容许您的应用拥有动画图像,而无需管理其更新或干扰应用的UI线程。 Drawable d = ImageDecoder.decodeDrawable(...); if (d instanceof AnimatedImageDrawable) { // Prior to start(), the first frame is displayed ((AnimatedImageDrawable) d).start(); }AMS
从Android P开始,只有当Intent flag
中指定了FLAG_ACTIVITY_NEW_TASK
,才容许在非Activity场景启动Activity。 APP必须拥有FOREGROUND_SERVICE权限,才容许使用前台服务,不然会抛出异常。 目前不少APP开发者们对Android O的一些后台限制行为不太了解这些变动,遇到问题可能误觉得系统问题,因此这里说到这顺便提一下关于Android O对后台行为的一些管控。(Background Service)
限制
JobScheduler
startService
方式启动服务,不然当targetSdk>=26
的状况下会抛出IllegalStateException
;(Foreground Service)
不会有这个限制,由于前台服务都会挂一个前台通知对用户来讲是可见的。Android O新增startForegroundService()
,用于启动前台服务,但有一个限制条件就是应用必须服务启动后5秒以内调用startForeground()
,不然会抛出ANRBOOT_COMPLETED, LOCALE_CHANGED
等。这样作是为了省电和性能,防止大量APP经过监听各类广播来拉起本身。PMS
重构Package Manger
,减小核心服务的代码复杂度,将permission,intent
等代码移到单独的类, 将user management,dex,shortcuts
等不相关代码移到子包;尽量操做本地数据,避免加锁;同时增长单元测试。 PMS在Android O主要改动是优化启动时间,将操做尽量并行化执行,在Android P上主要改动是扫描过程scanPackageOnly()
, 下一步提取更多的子组件和类,好比Intent resolution,
package verification, dexopt
等,减小修改对象成员的方法。SurfaceFlinger
中引入层级结构用于SurfaceView
,引入Task快照。在Android P上,继续提高建立对象模型,同步APP Transitions,WindowScope
工具, 过分使用Stack ID, Stack
管理着相似的task和activity,特定的窗口模式,例如HOME_STACK_ID,FULLSCREEN_STACK_ID,FREEFORM_STACK_ID
,这就致使同一个Stack的task和activity不容许有不一样的窗口模式。新的方案容许有多个WindowContainers
,窗口模式再也不受限于Stack ID。 采用同步的APP Transitions, animations
的过程可再也不须要WMS大锁。另外Transitions,WindowScope
工具是一个相似于systrace
的工具,可用于方便查看WindowManager和SurfaceFlinger,仅在userdebug
版本开启,对性能影响较小。Zygote
进程,提前开启应用进程并将其移至安全容器中,如此一来,应用便作好了随时启动的准备Google Play
将要求全部新应用及更新将 targetSdkVersion
设置为 28 (Android 9 Pie)
。除此之外,当用户首次运行 API
低级低于 23 (Android Marshmallow及Android 6.0)
的应用时,会受到来自 Android Q 的警告信息。