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

Android 2分钟刷Android 8.0系统 和 8.0适配 完美方案

2017-07-21 18:09 369 查看
性能优化


Android 性能优化 (一)APK高效瘦身


http://blog.csdn.net/whb20081815/article/details/70140063

Android 性能优化 (二)数据库优化 秒变大神

http://blog.csdn.net/whb20081815/article/details/70142033

 


Android 性能优化(三)布局优化 秒变大神


http://blog.csdn.net/whb20081815/article/details/70147958

 Android
性能优化(四)内存优化OOM 秒变大神

 http://blog.csdn.net/whb20081815/article/details/70243105

Android 性能优化(五)ANR 秒变大神

http://blog.csdn.net/whb20081815/article/details/70245594

Android 性能优化(六) RelativeLayout和LinearLayout性能比较

http://blog.csdn.net/whb20081815/article/details/74465870

 


Android 性能优化<七>自定义view绘制优化

http://blog.csdn.net/whb20081815/article/details/74474736

 


Android 性能优化<八> 多线程优化和线程管理

http://blog.csdn.net/whb20081815/article/details/77775444

Android 性能优化<九> RecyclerView替代Listview用法

http://blog.csdn.net/whb20081815/article/details/76221998

Android 性能优化(十)图片加载和大图片缓存机制OOM完美解决方案LruCache&DiskLruCache

http://blog.csdn.net/whb20081815/article/details/68493509

原理和源码分析:

1.Android Binder 作为 IPC 机制原理和面试回答   

http://blog.csdn.net/whb20081815/article/details/74436204

2. 


Android AIDL进程IPC通信 一次就好


http://blog.csdn.net/whb20081815/article/details/70766913


3.

Android
AIDL进程IPC通信 一次就好

http://blog.csdn.net/whb20081815/article/details/70766913


4.

 


Android反射(Reflect)完全解析--强势来袭


http://blog.csdn.net/whb20081815/article/details/61198050


5.

 


Android 2分钟学会xUtils 注解 Annotation(实例+原理)

http://blog.csdn.net/whb20081815/article/details/62423840

6. Android
上下文Context(最权威的官方教程)

http://blog.csdn.net/whb20081815/article/details/70258715

7.Android
Activty的加载过程 启动流程 源码分析

http://blog.csdn.net/whb20081815/article/details/76596473

异步任务源码分析

1.Android
Handle消息机制:秒懂Looper、Handler、Message三者关系

http://blog.csdn.net/whb20081815/article/details/67639060

2.Android AsyncTask 那些你不知道的事

http://blog.csdn.net/whb20081815/article/details/70332209

3.Android IntentService——知道这个你就能去BAT

http://blog.csdn.net/whb20081815/article/details/72284472

线程:

1).Android 价值千万   java线程专题:Wait¬ify&join&Yield

http://blog.csdn.net/whb20081815/article/details/65627387

2).Android 价值千万    java多线程同步 <二>Callable和Future&FutureTask

http://blog.csdn.net/whb20081815/article/details/65630694

3).Android 价值千万    java多线程<三>生产者消费者模型四种实现方法

http://blog.csdn.net/whb20081815/article/details/65635647

 4).


Android 价值千万    java多线程同步 <四> synchronized&Lock&Atomic6种方式


http://blog.csdn.net/whb20081815/article/details/66971983


5).Android 价值千万java多线程同步 <五>CountDownLatch(计数器)和Semaphore(信号量)

http://blog.csdn.net/whb20081815/article/details/68498371

6).Android 厉害了ThreadLocal的工作原理和实例分析

http://blog.csdn.net/whb20081815/article/details/66974651

(7)Android 性能优化<八>
多线程优化和线程管理
http://blog.csdn.net/whb20081815/article/details/77775444

UI,view和动画框架

1).Android 深入理解 View 的绘制流程和机制

http://blog.csdn.net/whb20081815/article/details/62236641

2). 


Android快速理解Activity、View及Window&WindowManager之间关系

http://blog.csdn.net/whb20081815/article/details/62419059

3).Android 动画用法+原理(Property Animation) 酷炫
UI动画

http://blog.csdn.net/whb20081815/article/details/64501074


4).Android 性能优化<七>自定义view绘制优化

 


http://blog.csdn.net/whb20081815/article/details/74474736

本文将从以下3个方面详细介绍Anroid 8.0完美适配

1).快速刷Anroid 8.0系统

2).应用API的主要修改,源代码详解,值得注意的地方

3).Anroid O新特性,行为变更

一).2分钟刷新Android 8.0的系统

1. Google O 版本的 O正式版已经发布, O-preview 的 SDK 下载地址: https://android.googlesource.com/platform/external/selinux/+/android-o-preview-1 

4.Google   源码托管地址:https://android.googlesource.com/platform/packages 
     需要翻墙才能用


5.API差异:https://developer.android.google.cn/sdk/api_diff/26/changes.html

6. Google O 版本的 O-正式版  source code 下载方法: <a
href=""https://source.android.com/source/downloading.html">https://source.android.com/source/downloading.html 

7. 目前 Nexus5X、Nexus6P、Nexus Player、Pixel C、Pixel、Pixel XL 可以升级 O 版本,
下载地址如下:https://developer.android.google.cn/preview/download.html#flashable-images

根据:opp4知道:是preview4,现在下载的最新版本是Android 8.0正式版本
  



最好采用的机器:Nexus6P:是谷歌系统,由华为代工

      建议采购 Nexus6P手机做自验证,O 版本(不包括 O)以后,Nexus 设备将不会再支持 android
新系统。
Android 新系统都会 第一时间支持自家手机。 刷手机的方法:

刷机流程如下:刷机有风险,操作需谨慎

从下面地址下载对应的镜像压缩包和脚本。
https://developer.android.google.cn/preview/download.html#flashable-images



 1.下载对应设备的压缩包并解压;
 2.手机连上 USB 后,执行 adb reboot bootloader 命令;
 3.等手机出现小机器人以后,并且显示‘unlock’字样时,执行压缩包中的 bat 脚本。
 如果是‘lock‘字样:
 1.连续点击设置-版本号 3 次,打开开发人员选项;
 2.在开发人员选项中打开 OEM unlock;
 3.连接手机到电脑,执行 adb reboot bootloader 命令到小机器人界面; 
 4.执行fastboot flashing unlock ,因为有些手机下面执行失败
 5.执行 fastboot oem unlock,这样手机就解锁了,再使用上面的刷机方法即可。

刷机流程总结:解锁,下载镜像,执行脚本就OK了,只需要10分钟解决

 没有 6P 等支持 O 版本的手机,怎么办?
 A.可以使用华为终端开放实验室 OpenLab 云测试平台进行兼容性测试和远程调测。 
平台介绍及使用说明:https://deveco.huawei.com/manualinstuction。
云测试平台: https://deveco.huawei.com,可以利用该平台选择
Nexus 6P 复现 O 版本的问题。 

fastboot工具:Android studio里面自带了fastboot

刷机注意的问题:

1.机型和镜像系统要对应

变更的东西:
 1. Google O 版本版本计划: https://developer.android.google.cn/preview/overview.html#timeline
 2. Google O 版本主要行为变更: https://developer.android.google.cn/preview/behavior-changes.html#o-apps
 需要重点关注 Background execution limits、Permissions 和 Security 

二).Android 8.0系统的主要行为变更



分为俩部分,针对所有
API 级别的应用和针对
Android 8.0 的应用

针对所有 API 级别的应用,需要特别关注的如下几个重点

1)后台运行限制

Android 8.0 还对特定函数做出了以下变更:
如果针对 Android 8.0 的应用尝试在不允许其创建后台服务的情况下使用 
startService()
 函数,则该函数将引发一个 
IllegalStateException

新的 
Context.startForegroundService()
 函数将启动一个前台服务。现在,即使应用在后台运行,系统也允许其调用 
Context.startForegroundService()
。不过,应用必须在创建服务后的五秒内调用该服务的
startForeground()
 函数

3).安全相关的变化

此平台不再支持 SSLv3。
在与未正确实现 TLS 协议版本协商的服务器建立 HTTPS 连接时,
HttpsURLConnection
 不再尝试回退到之前的
TLS 协议版本并重试的权宜方法。
Android 8.0 将使用安全计算 (SECCOMP) 过滤器来过滤所有应用。允许的系统调用列表仅限于通过 bionic 公开的系统调用。此外,还提供了其他几个后向兼容的系统调用,但我们不建议使用这些系统调用。

现在,您的应用的 
WebView
 对象将在多进程模式下运行。网页内容在独立的进程中处理,此进程与包含应用的进程相隔离,以提高安全性。

3).隐私策略变化  AndroidID

对于在 OTA 之前安装到某个版本 Android 8.0(API 级别 26)的应用,除非在 OTA 后卸载并重新安装,否则 
ANDROID_ID
 的值将保持不变。要在
OTA 后在卸载期间保留值,开发者可以使用密钥/值备份关联旧值和新值。
对于安装在运行 Android 8.0 的设备上的应用,
ANDROID_ID
 的值现在将根据应用签署密钥和用户确定作用域。应用签署密钥、用户和设备的每个组合都具有唯一的 
ANDROID_ID
 值。因此,在相同设备上运行但具有不同签署密钥的应用将不会再看到相同的
Android ID(即使对于同一用户来说,也是如此)。
只要签署密钥相同(并且应用未在 OTA 之前安装到某个版本的 O),
ANDROID_ID
 的值在软件包卸载或重新安装时就不会发生变化。
即使系统更新导致软件包签署密钥发生变化,
ANDROID_ID
 的值也不会变化。
要借助一个简单的标准系统实现应用获利,请使用广告 ID。广告 ID 是 Google Play 服务针对广告服务提供的唯一 ID,此 ID 可由用户重置。4
4).

4.记录未捕获的异常

如果某个应用安装的 
Thread.UncaughtExceptionHandler
 未移交给默认的 
Thread.UncaughtExceptionHandler
,则当出现未捕获的异常时,系统不会终止应用。从
Android 8.0 开始,在此情况下系统将记录异常堆栈跟踪情况;在之前的平台版本中,系统不会记录异常堆栈跟踪情况。
我们建议,自定义 
Thread.UncaughtExceptionHandler
 实现始终移交给默认处理程序处理;遵循此建议的应用不受
Android 8.0 此项变更的影响。

5.集合的处理

现在,
AbstractCollection.removeAll()
 和 
AbstractCollection.retainAll()
 始终引发 
NullPointerException
;之前,当集合为空时不会引发
NullPointerException
。此项变更使行为符合文档要求。

在 Android 8.0 中,
Collections.sort()
 是在 
List.sort()
 的基础上实现的。在
Android 7.x(API 级别 24 和 25)中,则恰恰相反。在过去,
List.sort()
 的默认实现会调用 
Collections.sort()

此项变更使 
Collections.sort()
 可以利用优化的 
List.sort()
 实现,但具有以下限制:

List.sort()
 的实现不能调用 
Collections.sort()
,因为这会导致堆栈因无限递归而溢出。相反,如果您需要 
List
 实现的默认行为,应避免重写
sort()

如果父类以不适当的方法实现 
sort()
 ,通常最好使用在 
List.toArray()
Arrays.sort()
 和 
ListIterator.set()
 的基础上构建的实现重写
List.sort()
。例如:
@Override
public void sort(Comparator<? super E> c) {
  Object[] elements = toArray();
  Arrays.sort(elements, c);
  ListIterator<E> iterator = (ListIterator<Object>) listIterator();
  for (Object element : elements) {
    iterator.next();
    iterator.set((E) element);
  }
}

在大多数情况下,您也可以使用根据 API 级别委托给其他默认实现的实现重写 
List.sort()
。例如:
@Override
public void sort(Comparator<? super E> comparator) {
  if (Build.VERSION.SDK_INT <= 25) {
    Collections.sort(this);
  } else {
    super.sort(comparator);
  }
}

如果您选择后者只是因为您希望开发一种适用于所有 API 级别的 
sort()
 函数,可以考虑赋予其一个唯一的名称,例如 
sortCompat()
,而不是重写
sort()


现在,
Collections.sort()
 只是对调用 
sort()
 的
List 实现进行的一项结构性修改。例如,在 Android 8.0 之前的平台版本中,如果通过调用
List.sort()
 进行排序,则当迭代处理 
ArrayList
 以及在迭代过程中调用 
sort()
 时,会引发 
ConcurrentModificationException
。而
Collections.sort()
 则不会引发异常。
此项变更使平台行为更加一致:现在,两种方法都会引发 
ConcurrentModificationException


 影响面向android O  8.0应用的:

1.后台限制 

(1)startService() 将抛出 IllegalStateException 

(2)限制在AndroidManifest.xml中注册接收隐式广播,如ACTION_PACKAGE_REPLACED ,但也有些例外如ACTION_BOOT_COMPLETED,ACTION_LOCALE_CHANGED(所有例外参考文末连接)。(注意此部分限制都是只针对targetSdkVersion为android O,或者编译的SDK为android O及以上的的,低于的则不受影响)

2.隐私相关变化 

(1)获取系统属性net.dns1、net.dns2、net.dns3 和 net.dns4不再可用 

(2)不再支持 Build.SERIAL,而改为 Build.getSerial()

3.本地库变化 

在Android O上强制要求Segment不能同时具备写和可执行,如数据段不可执行,代码段不可写。

4.ContentProvider的变更通知 

调用 ContentResolver.notifyChange()和registerContentObserver(Uri, boolean, ContentObserver) 实现通知和监听某些Uri上的变化,在Android O上则要求uri对应的ContentProvider要正确定义,但是没有定义会有怎样的问题并没有提及

5.应用快捷方式变化 

以com.android.launcher.action.INSTALL_SHORTCUT广播方式创建快捷方式不再有效,而要使用 ShortcutManager的 requestPinShortcut()方法。
3.网络连接及HTTPS相关:在connect失败之后,调用send(DatagramPacket)会抛出SocketException,以及其他一些细节的变化 

6.其他 

Alter Window的显示,集合排序方法的变化和获取用户帐号权限变化等。

三.Android 8.0新特性


Android O 新特性一   通知渠道 — Notification



创建通知渠道的步骤:

创建 NotificationChannel 对象,并设置应用内唯一的通知 ID。

配置通知渠道的属性,比如提示声音等。

在 NotificationManager 中注册通知渠道对象。


Android O 新特性二自适应图标 —Adaptive Icons

Android 的屏幕适配一直以来都折磨着不少的开发者。为了帮助开发者更好的与设备 UI 集成,Android O 支持创建自适应图标,

系统可以基于设备选择的蒙版将这些图标显示为不同形状。系统还将实现与图标的自动交互,并在启动器、快捷方式、设置、共享对话框以及概览屏幕中使用它们。



在以前的 Android 版本中,图标大小定义为 48 x 48 dp。现在你必须按照以下的规范定义你的图层大小:

两张图层大小都必须为 108 x 108 dp。

图层中心 72 x 72 dp 范围为可视范围。

系统会保留四周外的 36dp 范围用于生成有趣的视觉效果(如视差和跳动)。




Android O 新特性三画中画模式 — PIP

Android O 现已支持 Activity 的画中画模式。PIP 是一种多窗口显示模式,多用于视频播放,即你可以一边发微信一边看视频。

画中画模式图示



开发指南

1> 关于生命周期

PIP 模式不会改变 Activity 的生命周期。在指定时间只有最近与用户交互过的 Activity 为活动状态。 该 Activity 将被视为顶级 Activity。 所有其他 Activity 虽然可见,但均处于暂停状态。当一个 Activity 处于 PIP 模式时,其实它是出在暂停状态,但其内容会继续展示。

2> API变更

在 Android O 中新增 PictureInPictureArgs 对象来指明你的 Activity 在 PIP 模式中的属性,比如长宽比等。

Android O 还新增了以下方法来支持 PIP。

Activity.enterPictureInPictureMode(PictureInPictureArgs args):将Activity置于 PIP 模式之下。

Activity.setPictureInPictureArgs():用于更新 Activity 在 PIP 模式下的设置。如果 Activity 正处于 PIP 模式之下,那么更改的属性将立即生效。

参考链接
http://blog.csdn.net/w7849516230/article/details/68935953
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: