精华内容
下载资源
问答
  • Android 6.0新特性

    2017-02-16 08:45:45
    Android 6.0新特性 用户体验: 5月29日零点,谷歌正式在旧金山举办了广大安卓机友们都很期待的I/O开发者大会,这是谷歌每年都会举办的一次盛会,而对安卓机友们来说就是一次期盼。此次在会上,谷歌为大家带来...

    Android 6.0新特性


    用户体验:

    5月29日零点,谷歌正式在旧金山举办了广大安卓机友们都很期待的I/O开发者大会,这是谷歌每年都会举办的一次盛会,而对安卓机友们来说就是一次期盼。此次在会上,谷歌为大家带来了众望所归的安卓6.0(Android M)操作系统。

    新特性一:App Permissions(软件权限管理)

      在安卓6.0里,应用许可提示可以自定义了。它允许对应用的权限进行高度管理,比如应用能否使用位置、相机、麦克风、通讯录等,这些都可以开放给开发者和用户。

    新特性二:Chrome Custom Tabs(网页体验提升)

      新版的M对于Chrome的网页浏览体验进行了提升,它对登陆网站、存储密码、自动补全资料、多线程浏览网页的安全性进行了一些列的优化。

    新特性三:App Links(APP关联)

      安卓6.0加强了软件间的关联,谷歌在现场展示了 一个例子,比如你的手机邮箱里收到一封邮件,内文里有以个Twitter链接,用户点击该链接可以直接跳转到Twitter应用,而不再是网页。

    新特性四:Android Pay(安卓支付)

      Android支付统一标准,新的安卓6.0系统中集成了Android Pay,其特性在于简洁、安全、可选性。Android Pay是一个开放性平台,使用户就可以选择谷歌的服务或者使用银行的APP来使用它,Android Pay支持4.4以后系统设备,在发布会上谷歌宣布Android Pay已经与美国三大运营商700多家商店达成合作。支付功能可以使用指纹来进行支付,这意味着今年基于安卓M的Nexus产品肯定会有指纹识别了。

    新特性五:Fingerprint Support(指纹支持)

      安卓6.0增加了对指纹的识别API,谷歌开始在M里自建官方的指纹识别支持,力求Android统一方案,目前所有的Android产品指纹识别都是使用非谷歌认证的技术和接口。

    新特性六:Power & Change(电量管理 )

      新的电源管理模块将更为智能,比如Android平板长时间不移动时,安卓6.0M系统将自动关闭一些App。同时安卓6.0设备将支持USB Type-C接口,新的电源管理将更好的支持Type-C接口。

      此次,安卓6.0(Android M)新系统主要改进的地方就是,改善用户体验,修复BUG,提升了这个开放平台的整体质量,很多内容都得到了改善,相信从这些新特性中大家也能看到。

     

    新的知识点:

    1. okHttp

       1.1 okHttp用于替代HttpUrlConnection和Apache HttpClient(6.0里已移除HttpClient)

       1.2 okHttp优势

        1.2.1 支持SPDY,共享同一个Socket来处理同一个服务器的所有请求

        1.2.2 如果SPDY不可用,则通过连接池来减少请求延迟

        1.2.3 无缝的支持GZIP来减少数据流量

        1.2.4 缓存响应数据来减少重复的网络请求

       1.3 导入依赖

        1.3.0 图形化操作

        file - project structrue - app - dependebcies - library dependencies - 搜索okhttp

        1.3.1 修改build.gradle 

        compile "com.squareup.okhttp:okhttp:2.5.0"

        1.3.2 下载jar文件

        自行百度

       1.3 发送get请求

        1.3.1 创建OkHttpClient对象

        1.3.2 使用Request.Builder构建请求对象

        // http://wthrcdn.etouch.cn/weather_mini?citykey=101010100

        Request request = new Request.Builder().url(url).build();

        1.3.3 发送请求

        Response res = okHttpClient.newCall(request).execute();

        1.3.4 获取服务器返回的数据

        String json = res.body().string();

       1.4 发送post请求

        1.4.1 声明post的数据类型

        MediaType JSON = MediaType.parse("application/json;charset=utf-8");

        1.4.2 构建JSON字符串

        String jsonStr = "{name=\"你好啊!\"}";

        1.4.3 创建RequestBody消息体对象

        RequestBody body = RequestBody.create(JSON,jsonStr);

        1.4.4 使用Request.Builder构建请求对象

        // http://192.168.0.102:8080/TestProject/JsonServlet

        Request request = new Request.Builder().url(url).post(body).build();

        1.4.5 创建OkHttpClient对象,并发送请求

        Response res = okHttpClient.newCall(request).execute();

        1.4.6 获取返回结果

        if(res.isSussessful()){

        String json = res.getBody();

        }

       1.5 发送post请求,并传递字段

        1.5.1 构建RequestBody消息体对象

        // http://192.168.0.102:8080/TestProject/ParamServlet

        RequestBody body = new FormEncodingBuilder()

        .add("platform","android")

        .add("version","23")

        .add("SDK","24")

        .build();

        1.5.2 构建Request对象、OkHttpClient对象,发送post请求,并获取返回值


    2. TextInputLayout

       2.0 环境配置

        2.0.1 需要引用Support v7 和 Support Design 包(从MAVEN库引用,或最新的%SDK%\extra\design\libs下有jar包)

        2.0.2 创建xml的app属性(可以直接使用代码模板:appns)

        xmlns:app="http://schemas.android.com/apk/res-auto"

       2.1 展示效果:自带界面友好的错误提示

       2.2 使用TextInputLayout包裹一个EditText

       2.3 获取输入框

        textInputLayout.getEditText(); // 不需要findViewById

       2.4 显示错误提示

        textInputLayout.setErrorEnable(true);

        textInputLayout.setError(msg);

       2.5 隐藏错误提示

        textInputLayout.setErrorEnable(false);


    3. TextSelection变更

       3.1 展示效果:对比5.0的文本选择,6.0系统文本选择显示的菜单项可以被修改。

       3.2 创建布局,添加TextView

       3.3 获取TextView对象,注册回调监听

        tv.setCustomSelectionActionModeCallBack()

       3.4 自定义类实现监听接口 ActionMode.CallBack2

       3.4 ActionMode.CallBack2的onCreateActionMode方法创建Meu对象

        3.4.1 创建MenuInflate对象

        MenuInflate menuInflate = actionMode.getMenuInflater();

        3.4.2 填充menu对象

        menuInflate.inflate(R.menu.main, menu);

        3.4.3 方法返回值设置为true,说明该方法已被拦截


    4. FloatingActionButton(FAB)

       4.1 用于显示一个悬浮在界面上的按钮,可以设置点击事件(onClickListener)

       4.2 设置按钮大小

        app:fabSize="mini"

       4.3 设置按钮背景色

        app:backgroundTint="#fff";


    5. SnackBar

       5.1 展示效果:用于显示提示,官方建议用于替代Toast

       5.2 对比Toast来使用

        Toast.makeText(context,msg,0).show();

        Snackbar.make(view,msg,0).show();

       5.3 参数里View的作用

        查看官方文档,该view用于查找ParentView,以确定SnackBar的显示位置

       5.4 设置点击事件

        snackBar.setAction("可点击的提示文字",onClickListener);


    6. TabLayout

       6.1 展示效果:方便的实现tab跟随Viewpager切换,不需要第三方或者自定义

       6.3 在layout里使用tablayout

       6.4 向tablayout对象addTab

        tabLayout.addTab(tabLayout.newTab().setText(""))

       6.5 关联ViewPager

        方式一: viewpager.addOnPagerChangeListener(new TabLayoutOnPagerChangeListener(tabLayout))

        方式二:tabLayout.setupWithViewPager(viewPager)

       6.6 ViewPager使用的FragmentPagerAdapter

        需要在getPagerTitle方法返回一个字符串,该字符串会作为对应position的tab的标题。

       6.7 设置tab的点击事件

        tabLayout.setOnTabSelectedListener


    7. NavigationView

       7.1 展示效果:用作侧滑菜单的侧边导航栏

       7.2 必须嵌套在DrawerLayout里使用

        DrawerLayout包含两个子布局,一个导航栏,另一个为显示的正文

       7.3 NavigationView的属性:

        7.3.1 app:headerLayout,可选项,可以指定一个布局作为导航内容的Header

        7.3.2 app:menu,必需项,指定一个menu,作为导航内容的菜单

       7.4 导航栏的点击响应

        7.4.1 navigationView.setNavigationItemSelectedListener

        该方法监听被点击的MenuItem,判断MenuItem对象处理对应的事件响应


    8. CoordinatorLayout

       8.1 展示效果:可以协调多个布局间的位置关系。让FloatActionBar上下滑动,为Snackbar留出空间;拓展或折叠toolbar;控制view扩展或收缩,以及大小比例

       8.2 CoordinatorLayout作为根布局使用

       8.3 配合FloatActionBar和SnackBar使用

        8.3.1 布局里添加FAB,当界面上显示Snackbar的时候会自动的偏移FAB的位置


       8.4 配合AppBarLayout和toolbar使用

        8.4.1 用AppBarLayout包裹的子view会以一个整体的形式作为AppBar,从而具备统一的风格

        8.4.2 设置toolbar属性可以使toolbar随着界面滑动而隐藏/显示

        app:layout_scrollFlags="scroll|enterAlways"

        // scroll 表示该view可以被折叠

        // enterAlways 表示向上滑动则隐藏ToolBar,向下滑动则显示

        // exitUntilCollapsed 将关闭滚动直到它被折叠起来(有 minHeight) 并且一直保持这样

        // enterAlwaysCollapsed 定义了 View 是如何回到屏幕的,当你的 view 已经声明了一个minHeight, 并且你使用了这个标志,你的 View 只有在回到这个最小的高度的时候才会展开,只有当 view 已经到达顶部之后它才会重新展开全部高度。

        8.4.3 可滚动的控件需要设置属性

        app:layout_behavior="@string/appbar_scrolling_view_behavior"

        // 标识自己发起的滚动可以导致AppBar收缩

        8.4.3 带layout_scrollFlags的view需要放在布局的前面,这样收回的view才能够正常退出,而固定的view继续留在顶部


       8.5 配合AppBarLayout和CollapsingToolbarLayout使用

        8.5.1 AppBarLayout用于包裹且仅包裹CollapsingToolbarLayout,使得CollapsingToolbarLayout作为AppBar而存在

        8.5.2 CollapsingToolbarLayout用于包含Toolbar和ImageView, 提供滑动中的渐变和视差效果

        8.5.3 设置CollapsingToolbarLayout属性

        app:expandedtitleMarginStart="10dp"// 指定文字和左边缘的间距

        app:contextScrim="?attr/colorPrimary"//折叠后容器的颜色

        app:layout_scrollFlag="scroll|exitUntilCollapsed"

        // 拦截滚动的事件

        // enterAlwaysCollpsed  ---------- ????????

        // exitUntilCollapsed 可以让ToolBar固定在最顶部,而不伴随手势的滚动隐藏------- ??????????

        8.5.4 设置ImageView属性

        app:layout_collapseMode="parallax"

        // parallax模式:在内容滚动时,CollapsingToolbarLayout里的view可以同时滚动,造出视差效果

        8.5.4 设置Toolbar属性

        app:layout_collapseMode="pin"

        // pin模式:当CollapsingToolbarLayout完全收缩后,继续保留在屏幕上

        android:layout_height="?attr/actionbarSize" // 设置高度为actionbar的高度

        8.5.5 手势滑动时,修改toolbar文字大小,文字颜色

        8.5.5.1 获取到CollapsingToolbarLayout对象

        8.5.5.2 设置标题

        collapsingToolbarLayout.setTitle

        8.5.5.3 设置展开状态的颜色

        collapsingToolbarLayout.ExpandedTitleColor

        8.5.5.4 设置折叠状态的颜色

        collapsingToolbarLayout.setCollapsedTitleTextColor


    附:Android6.0 Design新特性搜索关键字:高逼格UI


     

     

    展开全文
  • Android 8.0 新特性

    万次阅读 2017-11-06 20:57:24
    Android 8.0 新特性前言Android 8.0 是目前 Android 最新的智能手机操作系统,2017年3月21日 Google 为开发者推出了Android O 首个开发者预览版,2017 Google I/O 开发者大会上发布了第二个Android O开发者预览...

    Android 8.0 新特性

    前言

    Android 8.0 是目前 Android 最新的智能手机操作系统,2017年3月21日 Google 为开发者推出了新的 Android O 首个开发者预览版,2017 Google I/O 开发者大会上发布了第二个Android O开发者预览。2017年8月22日,谷歌正式发布了Android 8.0的正式版,其正式名称为:Android Oreo(奥利奥)。在最近的 Android 版本更新中,可以看得出来,Google 已经更加注重 Android 的流畅性和续航能力等性能,这个倾斜会让 Android 的用户体验变得越来越好。

    由于 Anroid 提出了预览版的概念,所以全球手机平板等厂商会在预览版就开始适配自家的平台,不仅能修复更多 Android 的漏洞,完善 Android 的功能,而且这样会加速 Android 新版本能够更早的面市,给粉丝们带来喜悦。

    新特性

    画中画

    介绍

    画中画(Picture in Picture),简称 PIP。画中画就是一个画面中浮动着另外一个画面,其实就是画面的层次感。画中画最早用于 Android TV,从 Android 8.0 开始,API 开放给所有 Android 设备。其实在 Android 的旧版本,也可以利用 Android 窗口设计框架,在其它应用上面绘制 UI 的功能,实现类似的功能。国内的某信的视频通话就是基于 Android 这一特点。当然,Android 推出画中画功能,会更加便捷的实现同样的功能。读者可以阅读笔者的文章《Android窗口和视图》了解更多 Android 视图的知识。

    引用官方的一张动图
    这里写图片描述

    Android 的画中画是基于整个 Activity 的,并不是单纯的一个 View,因此,这里就会设计到 Activity 的生命周期的问题,所以画中画也会和 Activity 的生命周期绑定在一起,形成画中画生命周期。画中画的生命周期和 Android 7.0 推出的分屏模式的生命周期是一样的,只有当前和用户交互的 Activity 是最上层的 Activity,其它的可见的 Activity 都是 paused 状态。所以在处理画中画或者分屏模式需要注意 Activity 的生命周期。

    实现方法

    在项目的 manifest 中,给对应的 Activity 加上

    android:supportsPictureInPicture=ture

    调用接口

    Activity.enterPictureInPictureMode(PictureInPictureParams args)

    进入画中画模式。PictureInPictureParams 可以携带画中画的配置参数,如在屏幕中显示多大比例等,如果参数为空,系统将会使用默认配置参数。后续也可以通过接口

    Activity.setPictureInPictureParams()

    来改变窗口大小(比例)等。

    通知

    通知在 Android 的多个版本都有更新,说明这一块对 Android 系统来说非常重要,读者可以阅读笔者的文章《SystemUI架构分析》深入了解通知模块。

    通知渠道

    Notification channels 实际就是通知分类,每个应用可以创建多个不同的分类来显示通知,可以为不同的类别定制如下内容
    * Importance(重要性)
    * Sound(声音)
    * Lights(提示灯)
    * Vibration(震动)
    * Show on lockscreen(锁屏显示)
    * Override do not disturb(覆盖勿扰模式)

    这里写图片描述

    这里写图片描述

    创建自定义渠道
    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    // The id of the channel.
    String id = "my_channel_01";
    // The user-visible name of the channel.
    CharSequence name = getString(R.string.channel_name);
    // The user-visible description of the channel.
    String description = getString(R.string.channel_description);
    int importance = NotificationManager.IMPORTANCE_HIGH;
    NotificationChannel mChannel = new NotificationChannel(id, name, importance);
    // Configure the notification channel.
    mChannel.setDescription(description);
    mChannel.enableLights(true);
    mChannel.enableVibration(true);
    mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
    mNotificationManager.createNotificationChannel(mChannel);
    
    获取渠道信息

    设备用户可以在设备的设置里改变应用自定义的渠道,因此应用可以通过如下接口获取当前渠道的配置信息

    NotificationManager.getNotificationChannel (String channelId)
    List<NotificationChannel> channels = NotificationManager.getNotificationChannels ()
    NotificationChannel.getSound()
    NotificationChannel.getImportance()
    NotificationChannel.getVibrationPattern() 
    引导到渠道界面

    有时需要调转到渠道界面,让用户修改渠道设置

    Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
    intent.putExtra(Settings.EXTRA_CHANNEL_ID, mChannel.getId());
    intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
    startActivity(intent);

    通知标记

    Notification dots,这个功能不知说什么好,在 Android 7.0 的 pixel 手机上已经有这个功能框架,Android 8.0 新增了其它的功能点。这个功能和某果的手机的 3D touch 功能是类似到了,只是 Android 不是通过压力感应来实现,而是通过长按,这些都不重要,重要的是需要 Launcher 配合,OO,所以除开 pixel 的手机,目前没有其它厂商的 Luancher 开发了这个功能。读者可以阅读笔者的文章了解 Launcher 《Launcher的启动过程》《Launcher界面结构》《Launcher拖拽框架》《Launcher 记录自定义桌面》。

    这里写图片描述

    通知延时提醒

    Snoozing,Android 8.0 支持用户可以延时再次提醒该通知。这个功能应用本身无法设置,欲详细了解该功能,读者可以阅读 Android 8.0 的 SystemUI。

    通知超时

    Notification timeouts,设定多久时间通知自动消失。

    Notification.Builder setTimeoutAfter (long durationMs)

    通知设置

    应用可以添加通知配置入口,让用户可以点击快速调转到应用的通知设置界面,即上文中的通知渠道界面。

    Notification.Builder setSettingsText (CharSequence text)
    //相关 Intent,应用可以不关注
    Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES

    其它

    还有

    • Notification dismissal
    • Background colors
    • Messaging style

    读者可以查阅官网文档了解它们。

    自动填充

    自动填充功能在互联网上很多地方已经有应用,如度娘的搜索框,在输入搜索内容的一部分时,会弹出一个列表选择。在 Android AutoCompleteTextView 控件,也是实现类似的功能,只是 AutoCompleteTextView 的限制,谁用过谁知道,这个自动填充实在是太 low 了。自动填出不是什么新鲜的事物,Android 此处引入了功能强大的自动填充框架,也是很有必要。毕竟,自动填充可以带来两点优势

    • 减少输入时间,在手机上的输入速度实在也是慢
    • 减少输入错误,比如登录之类的,完全可以规避输入错误的问题

    这里写图片描述

    自动填充架构

    这里写图片描述

    数据,由 Autofill service 提供,Android 对数据的来源开放了接口,即应用开发者也可以开发自己的 Autofill service 提供自动填充时的数据。可以参考 Google 开源的 Autofill service 的 Demo

    Framework,主要由以下代码组成

    frameworks/base/core/java/android/view/autofill/AutofillManager.java
    frameworks/base/services/autofill/java/com/android/server/autofill/AutofillManagerService.java
    frameworks/base/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java
    frameworks/base/services/autofill/java/com/android/server/autofill/AutofillManagerServiceShellCommand.java

    控件,以 TexiView 为例

    .....
    private void requestAutofill() {
        final AutofillManager afm = mContext.getSystemService(AutofillManager.class);
        if (afm != null) {
            afm.requestAutofill(this);
        }
    }
    .....
    public boolean onTextContextMenuItem(int id) {
        switch (id) {
            case ID_AUTOFILL:
                requestAutofill();
                stopTextActionMode();
    
        }
    }
    .....

    以上代码定义在文件 frameworks/base/core/java/android/widget/TextView.java 中。

    更换Autofill Service

    Android 设备上的 Autofill service 可以由用户切换,路径是:Settings > System > Languages & input > Advanced > Input assistance > Autofill service。

    这里写图片描述

    打开自动填充

    AutofillManager afm = context.getSystemService(AutofillManager.class);
    if (afm != null) {
        afm.requestAutofill();
    }

    下载字体

    Android 8.0 提供字体下载,App 开发业都可以方便提供各种字体。对于强大的汉语的字体,不知会支持到什么程度了。字体下载详情可以看官方文档

    XML定义字体

    其实这个早已经有很多玩法,既然 Android 官方提供支持,也将会成为一种标准。详情进入

    自动缩放文本视图

    Autosizing TextView,就是会根据 TextView 在不同屏幕上的大小,来自动调整 TextView 内容的大小,对于 TextView 内容较多,TextView 内容变化频繁的场景非常实用。希望此举有望解决 Android TextView 内容经常显示异常导致界面超级难看的问题。

    对于 TextView 的内容大小调整,Android 提供了三种方式

    • Default
    • Granularity
    • Preset Sizes

    例子

    <?xml version="1.0" encoding="utf-8"?>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:autoSizeTextType="uniform"
        android:autoSizeMinTextSize="12sp"
        android:autoSizeMaxTextSize="100sp"
        android:autoSizeStepGranularity="2sp" />

    自适应桌面图标

    详情进入

    定时作业调度

    JobScheduler improvements,JobScheduler 在很早的版本就已经集成了,在 Anroid 8.0 做了些更新,主要还是因为 Android 8.0 中的后台限制,很多后台任务,后续版本需要迁移到 JobScheduler 上来。

    这次 JobScheduler 更新了作业队列,可以添加一系列作业,当 JobScheduler 运行时,所有作业将会被执行。

    JobScheduler.enqueue()

    Android 8.0 引入了新的 JobIntentService,功能上类似 IntentService,Android 8.0 中在后台无法运行的 Service,可以用新的 JobIntentService 代替。

    后台限制

    PS:此章节主要摘自官网

    每次在后台运行时,应用都会消耗一部分有限的设备资源,例如 RAM。 这可能会影响用户体验,如果用户正在使用占用大量资源的应用(例如玩游戏或观看视频),影响尤为明显。

    为了提升用户体验,Android 8.0 对应用在后台运行时可以执行的操作施加了限制。Android 终于着手解决多年困扰 Android 用户的第一诟病了,真的是非常具有前进性的一步。

    同时运行的应用越多,对系统造成的负担越大。 如果还有应用或服务在后台运行,这会对系统造成更大负担,进而可能导致用户体验下降;例如,音乐应用可能会突然关闭。为了降低发生这些问题的几率,Android 8.0 对应用在用户不与其直接交互时可以执行的操作施加了限制。

    应用在两个方面受到限制:

    1. 后台服务限制:处于空闲状态时,应用可以使用的后台服务存在限制。 这些限制不适用于前台服务,因为前台服务更容易引起用户注意。

    2. 广播限制:除了有限的例外情况,应用无法使用清单注册隐式广播。 它们仍然可以在运行时注册这些广播,并且可以使用清单注册专门针对它们的显式广播。

    注:默认情况下,这些限制仅适用于针对 O 的应用。 不过,用户可以从 Settings 屏幕为任意应用启用这些限制,即使应用并不是以 O 为目标平台。

    后台执行限制

    系统可以区分 前台后台 应用。 (用于服务限制目的的后台定义与内存管理使用的定义不同;一个应用按照内存管理的定义可能处于后台,但按照能够启动服务的定义又处于前台。)如果满足以下任意条件,应用将被视为处于前台:

    • 具有可见 Activity(不管该 Activity 已启动还是已暂停)。
    • 具有前台服务。
    • 另一个前台应用已关联到该应用(不管是通过绑定到其中一个服务,还是通过使用其中一个内容提供程序)。 例如,如果另一个应用绑定到该应用的服务,那么该应用处于前台:

      1. IME
      2. 壁纸服务
      3. 通知侦听器
      4. 语音或文本服务
      

    如果以上条件均不满足,应用将被视为处于后台。

    处于前台时,应用可以自由创建和运行前台服务与后台服务。 进入后台时,在一个持续数分钟的时间窗内,应用仍可以创建和使用服务。

    在 Android 8.0 之前,创建前台服务的方式通常是先创建一个后台服务,然后将该服务推到前台。

    Android 8.0 有一项复杂功能;系统不允许后台应用创建后台服务。 因此,Android 8.0 引入了一种全新的方法,即 Context.startForegroundService(),以在前台启动新服务。

    在系统创建服务后,应用有五秒的时间来调用该服务的 startForeground() 方法以显示新服务的用户可见通知。

    如果应用在此时间限制内未调用 startForeground(),则系统将停止服务并声明此应用为 ANR。

    在很多情况下,您的应用都可以使用 JobScheduler 作业替换后台服务。

    广播限制

    Android 8.0 广播限制更为严格。

    • 针对 Android 8.0 的应用无法继续在其清单中为隐式广播注册广播接收器。 隐式广播是一种不专门针对该应用的广播。 例如,ACTION_PACKAGE_REPLACED 就是一种隐式广播,因为它将发送到注册的所有侦听器,让后者知道设备上的某些软件包已被替换。

    不过,ACTION_MY_PACKAGE_REPLACED 不是隐式广播,因为不管已为该广播注册侦听器的其他应用有多少,它都会只发送到软件包已被替换的应用。

    • 应用可以继续在它们的清单中注册显式广播。

    • 应用可以在运行时使用 Context.registerReceiver() 为任意广播(不管是隐式还是显式)注册接收器。

    • 需要签名权限的广播不受此限制所限,因为这些广播只会发送到使用相同证书签名的应用,而不是发送到设备上的所有应用。

    在许多情况下,之前注册隐式广播的应用使用 JobScheduler 作业可以获得类似的功能。

    例如,一款社交照片应用可能需要不时地执行数据清理,并且倾向于在设备连接到充电器时执行此操作。

    之前,应用已经在清单中为 ACTION_POWER_CONNECTED 注册了一个接收器;当应用接收到该广播时,它会检查清理是否必要。 为了迁移到 Android 8.0,应用将该接收器从其清单中移除。

    应用将清理作业安排在设备处于空闲状态和充电时运行。

    注:很多隐式广播当前均已不受此限制所限。 应用可以继续在其清单中为这些广播注册接收器,不管应用针对哪个 API 级别。 有关已豁免广播的列表,请参阅隐式广播例外

    后台位置限制

    PS:此章节内容主要摘自官网

    为降低功耗,无论应用的目标 SDK 版本为何,Android 8.0 都会对后台应用检索用户当前位置的频率进行限制。

    重要说明:作为起点,我们只允许后台应用每小时接收几次位置更新。我们将在整个预览版阶段继续根据系统影响和开发者的反馈优化位置更新间隔。

    前台应用行为得到保留

    如果应用在运行 Android 8.0 的设备上处于前台,其位置更新行为将与 Android 7.1.1(API 级别 25)及更低版本上相同。

    优化应用的位置行为

    考虑在您的应用接收位置更新不频繁的情况下其后台运行用例是否根本无法成功。如果属于这种情况,您可以通过执行下列操作之一提高位置更新的检索频率:

    • 将您的应用转至前台。
    • 使用应用中的某个前台服务。激活此服务时,您的应用必须在通知区显示一个持续性的通知。
    • 使用 Geofencing API 的元素(例如 GeofencingApi 接口),这些元素针对最大限度减少耗电进行了专门优化。
    • 使用被动位置侦听器,它可以在后台应用加快位置请求频率时提高位置更新的接收频率。

    受影响的 API

    对后台应用位置检索行为的更改影响下列 API:

    • Fused Location Provider (FLP)

      如果您的应用运行在后台,位置系统服务只会根据 Android 8.0 行为变更中定义的间隔,按每小时几次的频率为其计算新位置。即使您的应用请求进行更频繁的位置更新,也仍是如此。
      如果您的应用运行在前台,与 Android 7.1.1(API 级别 25)相比,在位置采样率上不会有任何变化。
      
    • Geofencing

      后台应用可以高于接收 Fused Location Provider 更新的频率接收地理围栏转换事件。
      地理围栏事件的平均响应时间是大约每两分钟一次。
      
    • GNSS Measurements 和 GNSS Navigation Messages

      当您的应用位于后台时,注册用于接收 GnssMeasurement 和 GnssNavigationMessage 输出的回调会停止执行。
      
    • Location Manager

      提供给后台应用的位置更新只会根据 Android 8.0 行为变更中定义的间隔,按每小时几次的频率提供。
      
      注:如果运行您的应用的设备安装了 Google Play 服务,强烈建议您改用 Fused Location Provider (FLP)。
      
    • WLAN 管理器
      startScan() 方法对后台应用执行完整扫描的频率仅为每小时数次。如果不久之后后台应用再次调用此方法, WifiManager 类将提供上次扫描所缓存的结果。

    总结

    本文记录了 Android O 的新特性,仅仅是基于偏上层的新特性,O 版本还有很多其它的更新,如
    1. WebView API
    2. 多显示器支持
    3. 统一的布局外边距和内边距
    4. 指针捕获
    5. 输入和导航
    6. 新的 StrictMode 检测程序
    7. 指纹手势
    8. 更新的 ICU4J Android Framework API

    等等,非常多,本文就不一一记录了。

    [参考:Android 8.0 功能和 API]

    展开全文
  • Android 5.0新特性

    千次阅读 2017-02-16 16:58:25
    Android 5.0新特性 一、用户体验方面: 首先,在感官界面设计上,我们彻底迎来了Android系统的扁平化时代,的系统不仅使用了的配色,此外,谷歌全面改善了原来乏味的通知中心,让原生系统也拥有了像第三方...

    Android 5.0新特性


    一、用户体验方面:

    首先,在感官界面设计上,我们彻底迎来了Android系统的扁平化时代,新的系统不仅使用了新的配色,此外,谷歌全面改善了原来乏味的通知中心,让原生系统也拥有了像第三方插件那样强大的功能。另外,多任务系统也加入了更多的卡片式风格,同时还有大量的其它新特性,包括64位编译器(ART模式)和增强电池续航能力

    1、Material Design (发音: [mə'tɪrɪəl] [dɪ'zaɪn])

    Material Design翻译过来就是材料设计,是google对于android设备显示界面的主要更新,也可以说是一种新的设计语言。它使android UI更加扁平化,同时, Android L的界面会拥有类似物理表面和边缘的视觉效果——这一切很大程度上得益于Android L动态阴影的加入以及动画的加强。

    2、全新的通知中心设计

    谷歌在Android Lollipop中加入了全新风格的通知系统。改进后的通知系统会优先显示对用户来说比较重要的信息,而将不太紧急的内容隐藏起来。用户只需要向下滑动就可以查看全部的通知内容。

    新的通知系统另外一个很酷的新功能是在锁屏界面也可以直接查看通知消息了。不仅如此,用户还可以直接在锁屏的情况下就行回复或进入应用。另外,如果在操作手机的过程中有电话进入,也不会进行全画面切换,而是同样以弹出通知的方式告知用户。

    3、支持64位ART虚拟机

    Android Runtime简称ART,我们在android4.4的时候就有ART模式,但是国内大部分厂商都把这一模式给“阉割”了,依然使用的是Dalvik虚拟机。但是到了android L之后,我们的android系统默认的就是ART模式,它和Dalvik虚拟机的的区别:

    Dalvik虚拟机是要依靠一个编译器来实现与应用程序的沟通。应程序每次运行时,都需要将程序内的代码即使转变为机器码才能运行,这无形中多附加了一道手续,这就造成了耗电相对较快、占用内存大、即使是旗舰机用久了也会卡顿严重的现象。

         相比较而言ART模式就很好的解决了这个问题,通过在安装应用程序时,自动对程序进行代码预读取编译,让程序直接编译成机器语言,免去了Dalvik模式要时时转换代码,实现高效率、省电、占用更低的系统内存、手机运行流畅。但凡事总有正反两面,ART在解决了该问题的同时,同时也有如:会占用略高一些的存储空间、安装程序时要相比普通Dalvik模式要长一些时间来实现预编译。 

    ART处理应用程序执行的方式完全不同于Dalvik,运行起来更有效率、耗电更少、占的内存也更低。

    对64位处理器的支持也让ART虚拟机如鱼得水,开发者可以针对64位架构核心开发应用程序。同时Android L支持更大的寄存器,支持新的指令集,提升了内存寻址空间,未来Android智能手机将支持4GB以上的内存。

    并且ART模式中,google优化了gc,将他的暂停此时由2次编程了1次,并且在gc回收垃圾的时候可以多核并发处理。

    4、全新的“最近应用程序”

    除了界面风格设计的改变之外,新的最近应用界面还借鉴了Chrome浏览器的理念,采用单独的标签展示方式。更重要的是,谷歌已经向开发者开放了API,所以第三方开发人员可以利用这个改进为特定的应用增加全新的功能。

     

    二、开发者:

    1、抽屉布局(DrawerLayout)

          该对象在我们的support.v4包中,以后大家在做侧滑菜单的时候可以使用这个布局,在布局中可以设置左右两个侧滑菜单,同时,它还可以结合ActionBarDrawerToggle(带动画的一个按钮)使用:

    使用DrawerLayout:

       

    ActionBarDrawerToggle:随着侧滑菜单的画出有一个旋转的动画,同时,点击它侧滑菜单也会出来,使用它必须要有:

    这句代码让它在ActionBar上显示出来。

    2、涟漪动画、揭示动画、转场动画

    涟漪动画(Touch feedback):也叫“触摸反馈”

    当用户与用户界面进行交互时,Material Design中的触摸反馈在触摸点上提供了一种瞬时视觉确认。按钮的默认触摸反馈动画使用新的RippleDrawable类,它使用涟漪(波纹)效应在不同状态间转换。

    在大多数情况下,你应该在你的布局XML文件中使用如下的方法去指定视图的背景:

    ?android:attr/selectableItemBackground (有界波纹)

    ?android:attr/selectableItemBackgroundBorderless (无界波纹)

    注意:selectableItemBackgroundBorderless是API级别21上的新属性。

    效果如下:(自己点进去看效果)

    https://img-my.csdn.net/uploads/201412/07/1417881700_6000.gif-thumb.jpg

     

    在我们的布局里面这样设置:

    或者,你可以定义一个RippleDrawable作为波纹元素的XML资源:

    rippledrawable.xml

    <?xml version="1.0" encoding="utf-8"?>
    <ripple 
    xmlns:android="http://schemas.android.com/apk/res/android"
            
    android:color="@color/accent_dark">
        <item>
            <shape 
    android:shape="oval">
                <solid 
    android:color="@color/accent_dark"></solid>
            </shape>
        </item>
    </ripple>

    揭示动画(Circular Reveal):也叫“循环显示”

    首先我们要弄清楚,Circular Reveal是一个Android L新增的动画效果。

    使用方法:

    应用 ViewAnimationUtils.createCircularReveal() 方法可以去创建一个RevealAnimator动画。

    ViewAnimationUtils.createCircularReveal源码如下:

    public static Animator createCircularReveal(View view, int centerX, int centerY, float startRadius, float endRadius) {
        return new RevealAnimator(view, centerX, centerY, startRadius, endRadius);
    }

    源码非常简单,就是通过createCircularReveal方法根据5个参数来创建一个RevealAnimator动画对象。

    这五个参数分别是:

    view 操作的视图

    centerX 动画开始的中心点X

    centerY 动画开始的中心点Y

    startRadius 动画开始半径

    startRadius 动画结束半径

    根据下面的效果图和代码可以很容易的了解这几个参数的作用:

    http://img0.tuicool.com/yeQrQz.gif

    具体使用细节如下(操作方块):

    final View rect = this.findViewById(R.id.rect);
    rect.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Animator animator =   ViewAnimationUtils.createCircularReveal(
                    rect,
                    0,
                    0,
                    0,
                    (float) Math.hypot(rect.getWidth(), rect.getHeight()));
            animator.setInterpolator(new AccelerateInterpolator());
            animator.setDuration(2000);
            animator.start();
        }
    });

    总结:

    RevealAnimator 和之前的动画使用没什么区别,同样可以设置监听器和加速器来实现各种各样的特效。

     

    转场动画(Activity Transition):也叫“Activity过渡“

    转场动画大多使用于两个界面(Activity)之间的跳转,他们之间就可以有这样的一个动画。主要有三种效果的动画:Explode(爆炸式)、Fade(淡入淡出)、Slide(平滑式)。

    使用这些动画,你必须在进入和退出activity都要求使用这些内容转场特效,并且在两个Activity的setOncontent()里面有:

    getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);

    并且必须在setContentView()加载布局之前设置。

    使用getWindow().setExitTransition( Transition ) 和getWindow().setEnterTransition( Transition ) 方法告诉activity当打开和关闭时如何执行,Transition代表的就是Explode(爆炸式)、Fade(淡入淡出)、Slide(平滑式)中的一种,例外还有4个方法需要知道:

    getWindow().setEnterTransition(transition);

    getWindow().setExitTransition(transition);

    getWindow().setReturnTransition(transition);

    getWindow().setReenterTransition(transition);

    为了帮助大家理解,我们做这样的假设:

    A和B分别是两个Activity,我们从A Activity跳转到B Activity。

    Activity transition API围绕退出(exit),进入(enter),返回(return)和再次进入(reenter)四种transition。按照上面对A和B的约定,我这样描述这一过程。

    Activity A的退出变换(exit transition)决定了在A调用B的时候,A中的View是如何播放动画的。

    Activity B的进入变换(enter transition)决定了在A调用B的时候,B中的View是如何播放动画的。

    Activity B的返回变换(return transition)决定了在B返回A的时候,B中的View是如何播放动画的。

    Activity A的再次进入变换(reenter transition)决定了在B返回A的时候,A中的View是如何播放动画的。

    按照上面的规则,我们:

    在第一个Activity中:

    @Override
    public void onClick(View v) {
        Transition transition=null;
        Intent intent=null;
        switch (v.getId()){
            case R.id.explodeButton://爆炸式过渡
                transition = new Explode();
                intent = new Intent(this, ExplodeActivity.class);
                break;
            case R.id.fadeButton://淡入淡出过渡
                transition = new Fade();
                intent = new Intent(this, FadeActivity.class);
                break;
            case R.id.slideButton://平滑的过渡
                transition = new Slide();
                intent = new Intent(this, SlidActivity.class);
                break;
        }
        transition.setDuration(1000);
        getWindow().setEnterTransition(transition);
        getWindow().setExitTransition(transition);
        getWindow().setReturnTransition(transition);
        getWindow().setReenterTransition(transition);
     
    
    //界面跳转,官方文档规定的。
        startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
    }

    在第二个Activity中:

    public class ExplodeActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
                  getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
            Transition transition = new Explode();
            transition.setDuration(1000);
            getWindow().setEnterTransition(transition);
            getWindow().setExitTransition(transition);
            getWindow().setReturnTransition(transition);
            getWindow().setReenterTransition(transition);
    
            setContentView(R.layout.activity_explode);
        }
    }

     

    3、RecyclerView

    RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家可以通过导入support-v7对其进行使用。首先我们要明白一点,RecyclerView可以用来代替我们的ListView和GridView,同时对ViewHodler进行了更好的封装,它自动重用我们的convertView。所以使用更加简单。

    Recycler高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现令人瞠目的效果:

    你想要控制其显示的方式,请通过布局管理器LayoutManager

    你想要控制Item间的间隔(可绘制),请通过ItemDecoration

    你想要控制Item增删的动画,请通过ItemAnimator

    下面是使用recyclerView最简单的一个布局:

    在我们的Activity里面获得到它,使用方法跟我们的ListView一样:

    下面是适配器adapter里面的内容(添加了条目点击事件哦):

    private RecyclerView.Adapter adapter new RecyclerView.Adapter() {
        
    @Override
        
    public int getItemCount() {//条目数量
            
    return iconsV.size();
        
    }
        
    @Override 
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {   //创建ViewHolder的方法,这里就需要你创建一个ViewHolder了

    //加载布局条目
            View view = View.inflate(MainActivity.
    this, R.layout.item, null);
            return new 
    MyViewHolder(view);//创建ViewHolder并返回
        }

        
    @Override
        
    public void onBindViewHolder(RecyclerView.ViewHolder holder, intposition) {//绑定ViewHolder的方法
            MyViewHolder mMyViewHolder= (MyViewHolder) holder;

    ;//设置条目里面的图片
            
    mMyViewHolder.iv.setImageResource(iconsV.get(position)) 
            mMyViewHolder.itemView.setTag(mMyViewHolder);

    //给条目添加点击事件
            
    mMyViewHolder.itemView.setOnClickListener(MyOnclickListener);
        
    }
        
    private View.OnClickListener MyOnclickListener=new View.OnClickListener(){
            
    @Override
            
    public void onClick(View v) {

    //拿到对应条目的holder
                MyViewHolder mMyViewHolder = (MyViewHolder) v.getTag()
    ;
                int 
    position = mMyViewHolder.getAdapterPosition();
                
    iconsV.remove(position);

    //刷新已经移除的条目,RecyclerView不需要整体刷新
                adapter.notifyItemRemoved(position);
            
    }
        }
    ;

    //创建一个ViewHolder
        class 
    MyViewHolder extends RecyclerView.ViewHolder {
            
    private ImageView iv;
            public 
    MyViewHolder(View itemView) {
                
    super(itemView);
                
    iv = (ImageView) itemView.findViewById(R.id.iv);
                
    itemView.setTag(this);
            
    }
        }
    }
    ;

     

    5、CardView

    通过图片,我们知道CardView继承至FrameLayout类,可以在一个卡片布局中一致性的显示内容,卡片可以包含圆角和阴影。CardView是一个Layout,可以布局其他View。

    使用它需要我们在xml中定义:

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        <android.support.v7.widget.CardView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            card_view:cardCornerRadius="6dp"
            card_view:cardElevation="6dp"
            card_view:contentPadding="5dp"
            android:layout_marginBottom="10dp"
            >
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
                <ImageView
                    android:id="@+id/iv"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:src="@mipmap/ic_launcher"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="图片标题"/>
            </LinearLayout>
        </android.support.v7.widget.CardView>
    </FrameLayout>

    注意1:我们一定要有xmlns:card_view=http://schemas.android.com/apk/res-auto命名空间

    注意2:我们需要在CardView的外层套一个FramLayout,这样显示效果更明显,更加;但是当在加载View条目的时候没有加载FramLayout的宽高,这样也没关系。我们只需要在CardView里面添加就行了。

    下面我们列举CardView的一些常用属性:(红色为最常用的)

    card_view:cardElevation 卡片的高度(阴影)

    card_view:cardMaxElevation 阴影最大高度

    card_view:cardBackgroundColor 卡片的背景色

    card_view:cardCornerRadius 卡片的圆角大小

    card_view:contentPadding 卡片内容于边距的间隔

    card_view:contentPaddingBottom

    card_view:contentPaddingTop

    card_view:contentPaddingLeft

    card_view:contentPaddingRight

    card_view:contentPaddingStart

    card_view:contentPaddingEnd

    card_view:cardUseCompatPadding 设置内边距,V21+的版本和之前的版本仍旧具有一样的计算方式

    card_view:cardPreventConrerOverlap 在V20和之前的版本中添加内边距,这个属性为了防止内容和边角的重叠

     

    1. 简介

       0.1 Material Design

       0.4 查看视频

       0.5 打开AndroidStudio和模拟器,展示5.0效果

        0.5.1 由于手机性能提升,5.0上原生API的控件,谷歌增加了很多动画

        0.5.2 可以变更标题栏和ActionBar的颜色

        0.5.3 其他的控件和动画展示

        0.5.4 Material完整效果在5.0以上版本原生提供,Support包的兼容性无法做到完全一样


    2. 自定义状态栏、标题栏、导航栏的颜色

       1.1 参考图片说明和源码,修改新建项目的values-v21/styles.xml

       1.2 查看动态切换主题的代码,代码不重要,学生应该掌握查找代码的方法


    3. 阴影

       2.1 z = elevation(海拔) + translationZ(属性动画里Z轴的位移)

       2.2 阴影范围越大,颜色越淡,表示海拔越高

       2.3 海拔高的控件显示在界面上层

       2.4 材料设计认为控件都是有实体质感的,可以拉伸折叠收缩,但是不能有“穿墙”的行为

       2.3 当子控件已经比父控件大,则阴影不会显示


    4. 圆形图片轮廓的显示方式

       3.1 xml设置

        outlineProvider:none|background|bounds|paddedBounds

       3.2 代码设置

        view.setOutlineProvider(new ViewOutlineProvider(){

        public void getOutLine(view,outine){

        outline.setOval(0,0,view.getWidth(),view.getHeight());

        }

        });

       3.3 注意:阴影不会超出父view范围


    5. 图片选择器 tint属性

       4.1 直接从文档展示

       4.2 创建Bitmap的Drawable文件,指定src、tintmode和tine可以生成新的图片


    6. 图片颜色抽取 Palette

       5.1 直接从文档展示

       5.2 引入support下的palette包

        Palette.from(drawable.getBitmap()).generate(new Palette.PaletteAsyncListener() {

             @Override

             public void onGenerated(Palette palette) {

                 int color = palette.getLightVibrantColor(Color.RED);

                 Log.d(TAG, "onGenerated: color="+color);

                 iv.setBackgroundColor(color);

             }

         });


    7. 矢量图

       6.0 矢量图和栅格图区别

       6.1 直接从文档展示

        6.1.1 创建vector的drawable

        6.1.2 指定宽高、以及viewport宽高

        6.1.3 指定绘制的path属性

        name、fillcolor、pathdata

       6.2 可以创建矢量图的网站

        http://editor.method.ac/


    8. 矢量图动画

       7.0 从源码查看

       7.1 创建animated-vector的drawable

       7.2 指定animator-vector的默认图片

       7.3 指定animator-vector的动画资源animator-1

        <target name="vector" animator="@animator/animator-1" />

       7.4 创建animator/animator-1.xml

       7.5 animator-1为一个set,包含了多个objectAnimator

       7.6 objectAnimator应该指定:

        duration="2000",propertyName="pathData",valueType="pathType",valueFrom="图形数据",valueTo="图形数据"


    9. 按压时的波纹效果

       8.1 background="?android:attr/selectableItemBackgroud"

       8.2 自定义波纹动画

        Animator anim = ViewAnimationUtils.createCircularReveal(view, centerX, centerY,startRadius,endRadius);

        // 在指定view的指定位置,以startRadius为起始半径,endRadius为最终半径,绘制水波纹动画

        anim.start();


    10. SwipeRefreshLayout

        9.0 展示效果:下拉刷新列表

        9.1 增加到布局文件

        9.2 find到view对象,并修改下拉颜色变化

        9.3 设置下拉监听


    11. RecycleView

        10.1 展示效果:可以垂直/水平显示的列表/瀑布流,功能强大,用于替代ListView

        10.2 增加到布局文件

        10.3 find到view对象,并设置Adapter

        10.4 设置布局管理器

        10.5 点击事件处理


    12. CardView

        11.1 展示效果:具备阴影的控件,也就是具备z轴海拔的控件

        11.2 该View继承自FrameLayout,直接作为父布局包裹子控件即可


    12.v7包的ToolBar

    12.1 用于替代ActionBar,继承自ViewGroup可以任意包裹子布局,灵活性更高

    12.2 使用时必须设置背景色

    12.3 设置主题,隐藏ActionBar

    parent="Theme.AppCompat.NoActionBar"

    12.4 主界面继承自AactionBarActivity,onCreate方法执行时设置ToolBar作为ActionBar

    setSupportActionBar(toolbar);


    13. v4包的drawerToggle

        13.1 展示效果:抽屉效果,可以关联toolbar

        13.2 在布局文件添加DrawerLayout,包裹两个帧布局

        13.3 创建DrawerToggle对象

         drawToggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.open,R.string.close);// 构造方法里关联了drawLayout和toolbar

        13.4 设置监听

         drawerLayout.setDrawerListener(drawerToggle);

        13.5 开启功能

        ```java

        drawerToggle.sysncState();

        ```


    展开全文
  • Android 9.0新特性

    万次阅读 2018-08-07 16:03:37
    新特性: 1、全面屏支持,Android P加入了对刘海屏的支持,谷歌称之为凹口屏幕(display with a cutout)。借助最新的提供的DisplayCutout类,开发者可以找到非功能区域的位置和形状,而非功能区域是不应显示功能的...

    今天凌晨,google推出了Android 9.0,作为一个android从业者,少不了要去打开看一下,也顺便记录一下。

    新特性:

    1、全面屏支持,Android P加入了对刘海屏的支持,谷歌称之为凹口屏幕(display with a cutout)。借助最新的提供的DisplayCutout类,开发者可以找到非功能区域的位置和形状,而非功能区域是不应显示功能的;使用getDisplayCutout()就可以获取这个区域的详细信息,未来刘海屏手机很有可能成为主流趋势,在前摄像头没有比较好的隐藏方案出现之前,这可能是提高屏占比的好方法。

    2、通知栏的多种通知,从牛轧糖开始,你就可以增加一个action以对消息或从通知直接进入文字的行为作出反应。而在Android P版本中,你还可以在消息中展示图像;新的Notification.Person类可以识别对话中的任务,包括他们的头像和URI;当用户关闭消息通知时,你的app可以获取由系统发出的EXTRAREMOTEINPUT_DRAFT。你可以使用这个extra值来在app中进行预填充……

    3、多摄像头的更多画面,可以即时获取到两个或者更多的相机数据流,可以想象将有更多有趣的设计和实现出来

    4、GPS定位之外的WiFi定位,Android P增加了平台级支持IEEE 802.11 mc Wi-Fi协议(即Wi-Fi Round-Trip-Time,RTT), 从而让开发者可在App中使用室内定位。使用有硬件支持的Android P设备上,你的应用可以使用最新的RTT API以测量附近具有RTT功能的Wi-Fi AP。当然,前提是你的设备必须有定位功能而且你的App已经获取了ACCESS_COARSE_LOCATION及其以上的权限,可以想象将来更加精准的定位所带来的丰富的应用场景。

    5、网络还有神经网络,在Android P上,任务可以声明它们估算的数据大小,信号预读取并且指定详细的网络需求--任务载体则可以报告网络是否拥挤或是否不计量。JobScheduler便可按照网络状态管理任务。另一方面,神经网络API在Android 8.1引入,目的是加速Android设备上的机器学习。Android P扩展并改进了这些API, 为9个操作增加了支持,分别是Pad, BatchToSpaceND, SpaceToBatchND, Transpose, Strided Slice, Mean, Div, Sub和Squeeze。在Android P之后,设备将会对网络有更精细的调整:根据任务需求的数据大小和当前的网络环境。在收费网络里延迟一些网络要求,而在不计费的网络里可以通过消息预获取来得到更好的用户体验。神经网络API的更多操作则是让设备变得更智能、更聪明。智能的一种体现,节省流量和网络速度优化体验的一种好的改进。

    6、Material Design迎来2.0时代,神经网络Android 9.0加入了大量的圆角设计,UI方面的优化,感觉有些鸡肋,在现在各种模仿的设计趋势和各种定制化UI下,许多功能只是看看而已,用不到多少。

    7、Android Dashboard:用户可以看清楚自己在受手机上都干了哪些事情,从而提醒自己是否过多的浪费了不必要的时间,比如后是否看电影看视频太多,是否玩游戏太多等等。并在必要的时候提醒你应当休息一下。对某一款应用进行时间限制,用户使用到一定时间之后就会提醒,甚至让图标变灰色,以提醒用户尽量少用这个APP

    8、Wind Down:夜间模式;

    9、Adaptive Battery:更智能的方式来适应电池和屏幕,从而整体改善续航能力。谷歌加入了Adaptive Battery功能,不过这个模式需要单独开启,在该模式下,程序不需要唤醒可以极大的降低资源占用,更关注用户最常用的服务和应用程序,也算是AI技术的应用之一。这样就可以最大限度的降低后台占用,从而提升电池续航能力。这是Android团队与Google DeepMiind团队合作开发的成果,不仅可以预测用户接下来几个小时内将使用的应用程序,而且还包括在当天用户何时会使用哪些应用程序。智能的一种应用。

    10、Shush:屏幕朝下时进入完全勿扰状态;除了能够阻挡电话和通知的打扰,还有视觉免打扰的功能,屏幕不会点亮,直到用户主动打开手机。有趣的是在这个模式下,如果用户将手机屏幕朝下放置,那么手机会自动调整为震动或者静音模式,只保留闹钟的声音。

    11、Actions和Slices:通过检测用户的行为,让系统作出对应的动作。如插入耳机孔自动播放音乐,搜索“打车”自动显示打车软件等。

    总结:对更大屏幕显示的追求和视觉等体验的优化,智能的开始体现(用户行为的学习及正确化引导,网络环境的智能适应,电池电量的优化),更加人性化。期待更好的android,期待更好的智能体验,加油!

     

    展开全文
  • Android12新特性

    千次阅读 2021-02-21 10:26:28
    Android 12中,我们还致力于为您提供工具,以为用户打造出色的体验。首先从兼容的媒体转码之类的东西开始,它可以帮助您的应用使用最新的视频格式(如果您尚不支持它们),以及轻松地将丰富的内容(例如图像和...
  • Android9.0 新特性

    千次阅读 2018-08-27 20:54:30
    Android 9(API 级别 28)为用户和开发者引入了众多新特性和新功能。 本文重点介绍面向开发者的功能。 利用 Wi-Fi RTT 进行室内定位 Android 9 添加了对 IEEE 802.11mc Wi-Fi 协议(也称为 Wi-Fi Round-Trip-...
  • Android7.0新特性功能  基本概念 1: Google Duo  Google Duo:Google Duo是一款视频通话工具应用APP,Google Duo是Allo视频辅助技术,即使网速不快也能流畅通话 2: GMS  GMS:全称为Google Mobile ...
  • Android 8.0 新特性适配

    千次阅读 2017-08-27 14:44:48
    APP适配8.0新特性详情
  • Android 使用Java8新特性之"方法引用

    千次阅读 2017-03-13 18:10:46
    上一文:Android 使用Java8新特性之Lambda expression (附命令者模式简化) 说过lambda表达式,在android中的应用。本文讲下Java8新特性之”方法引用”。 “方法引用”,它其实可以看成lambda表达式的一种简写形式...
  • 安卓9.0系统新特性

    千次阅读 2019-09-08 14:44:27
    安卓9.0系统新特性 新特性一: 日前针对Android系统特有的开放式特点,及其所带来的卡顿、运行不流畅问题,谷歌特意研制出最新版Android 9.0,以增强系统的封闭性。于是,网上曝出了很多安卓“抄袭”“模仿”iOS的...
  • Android P新特性

    千次阅读 2018-05-22 16:25:27
    转:http://gityuan.com/2018/04/08/android_p/引言2018年3月8日,谷歌发布了Android P的预览版,预计今年的Q3季度发布final release版本,有不少文章从开发者角度介绍了Android P的特征,初步来看给感觉这次大...
  • Android开发使用Java8新特性

    千次阅读 2016-11-23 16:50:09
    Android 支持所有 Java 7 语言功能,以及一部分 Java 8 语言功能(具体因平台版本而异)。本文介绍您可以使用的语言功能、如何正确配置项目以使用这些功能,以及您可能遇到的任何已知问题。注:在为 Android 开发...
  • Android11新特性

    千次阅读 2020-05-07 17:59:11
    前不久,谷歌发布了Android 11 的预览版,从开发者预览版我们可以了解到,Android 11增强了对用户隐私的保护,提供了很多吸引用户的新特性,并且可以更好地支持可折叠设备和 Vulkan 扩展程序等等。 谷歌官方的资料...
  • Android5,6,7,8新特性

    千次阅读 2018-02-05 17:16:24
    前言 Google每发布一个Android新版本,都会在官网...查看每个版本的功能,针对新特性作产品兼容。否则App运行在的版本会出现一系列问题。下面是Android每个版本的功能和行为变更。 Android行为变更 Android官...
  • Android 9.0 新特性

    万次阅读 2018-03-09 13:39:11
    Google于2018年3月8日悄无声息的推送了Android P,不出意外的话这也将是Android 9.0的代号。接下来一起看看在这次更新中有哪些功能吧。 本文参考:Google Developer 新特性 室内WIFI定位 “刘海”屏幕支持 ...
  • 前言Lambda expression,java8...java8还有其它一些新特性,不过在android上可能都无法使用。 studio 2.x后 支持jack编译器,使用它,能使用java8的Lambda expression,但其它特性也不敢保证就能用。 注:Androi
  • Android9.0新特性

    千次阅读 2018-08-17 16:37:26
    2018年8月7日-凌晨1点,谷歌发布了Android 9.0操作系统,它的名字是Android 9,被命名为Android Pie。让我们看看关于Android 9派你需要知道的一切。...Android Pie 新特性有哪些? 官方Release Note更...
  • Android9.0 新特性 8.0 新特性

    千次阅读 2018-08-08 20:22:50
    9.0 特性: 1.刘海模式,兼容适配刘海样子,手机内有可以直接设置刘海模式开发,不用去找多个厂家手机就可以进行兼容性适配。 2.ai智能应用,动态电量控制,控制电量分配,对于近期少用的少分配 3.全局夜间模式,...
  • Android 7 新特性浅析

    千次阅读 2016-06-27 14:31:15
    Android 7是谷歌推出的智能手机操作系统... Ampitheatre圆形剧场,新版的Android N系统正式发布,作为android 开发者还是得紧跟潮流,看一下android 7 有什么特性,这有助于开发出 更好的 应用。 Android N 与前面的系
  • Java 8 新特性总结

    千次阅读 2016-10-14 10:27:58
    Java 8 新特性 ...二、在AndroidStudio中设置某项目支持使用Java 8 新特性 三、 Lambda 表达式 四、接口增强 五、注解 六、泛型目标类型推断 七、Java 8 类库的新特性 八、总结Java8所有新特性及改进内容
  • 安卓8.0新特性

    2018-01-11 15:21:13
    Android 8.0名曰 Android Oreo(奥利奥)...原生Android也有小红点了,提醒你应用里有内容。别担心,那个点没有那么红, 会和应用的Logo本身的色调统一,在增加功能性的同时没有牺牲太多的美观性。 3、即时应用Andr
  • Android O新特性和行为变更总结

    千次阅读 2017-07-10 14:22:36
    原文地址(QQ音乐微信公众号首发): https://mp.weixin.qq.com/s?__biz=MzI1NjEwMTM4OA==&mid=2651232573&idx=1&sn=56963d1ecb1eeea2c82ec88d9667c0b0&chksm=f1d9e45ec6ae6d480b1b8ab73b1. Android O 新特性 前段...
  • Android 7.0新特性,深入了解Android7.0

    千次阅读 2017-03-22 22:31:32
    2016年8月22日,谷歌正式推...除了修复常规BUG,Android 7.0还新增了分屏、的Notification、VR支持等新特性8月22日,谷歌正式推送Android 7.0 Nougat(牛轧糖)正式版,首发推送了多款Nexus设备。除了修复常规BUG,
  • AndroidStudio中设置某项目支持使用Java 8 新特性 build.gradle文件中加如下代码: android { ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion....
  • Android 8.0 新特性

    2017-08-22 20:02:21
    那备受开发者关注的 Android O 有哪些新特性,开发者需要关注哪些问题呢?腾讯云乐固团队结合相关文档对此进行了分析总结,我们一起来看看 Android O 的新特性及开发指南。 Android O 新特性一介绍以及开发...
  • Android 8.1新特性

    万次阅读 2017-12-25 14:25:59
    Android 8.1的主要功能点有: 1、神经网络API(NNAPI),提供机器学习的硬件加速。 2、通知:通知消息现在每秒仅能发出一次提示音。 3、改善2G以下内存设备的表现 4、自动填充功能针对APP进行优化,提供验证器...
  • Android N 的新特性

    千次阅读 2016-06-14 15:48:18
    开发者角度看 Android N 的新特性
  • Android7.0新特性

    千次阅读 2017-07-16 16:22:49
    定名为“Nougat”(牛轧糖)。...Android N 据谷歌介绍,Nougat带来了250多项新特性。  Google Assistant “清除全部”按钮  Instant Apps(即时应用) 无缝更新  Daydream VR支持  真正的多窗口多任务处理...
  • Android5.0新特性

    千次阅读 2015-11-28 23:24:16
    虽然6.0早就出了,但是呢,5.0用的都很...Android 5.0新特性 Material Theme View的阴影和裁剪 Drawables图形资源 Animations 新增控件-卡片和列表 http://developer.android.com/training/material/index

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 95,844
精华内容 38,337
关键字:

安卓8新特性