1. Canvas.save() 跟 Canvas.restore()的调用时机
save: 用来保存
Canvas的状态。save之后,可以调用Canvas的平移,放缩,旋转等操作。
restore: 用来恢复canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响。
2. Android P(9.0) 的新特性
- 支持WiFi室内定位
- 适配刘海屏
- 通知栏改进:可以显示对话,附加照片和表情等
- 多摄像头api
- 对于非 http连接,将直接拦截,推荐使用https
Android 8.0
PHONE 权限组新增加两个权限
- ANSWER_PHONE_CALLS:允许您的应用通过编程方式接听呼入电话。要在您的应用中处理呼入电话,您可以使用 assceptRingingCall() 函数
- READ_PHONE_NUMBERS: 权限允许您的应用读取设备中存储的电话号码
- 通知适配 - 为了更好的管理通知的提醒,不想一些不重要的通知打扰用户,新增加用户渠道,用户可根据渠道屏蔽一些不重要的通知 
- 安装apk - 在 AndroidManifest 文件中添加未知来源应用的权限: - <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>这样系统会自动询问用户完成授权。- 也可以通过 - canRequestPackageInstalls查询是否有此权限,如果没有的话就使用- Settings.ACTION_MANAGE_UNKNOW_APP_SOURCE引导用户安装未知应用权限去授权。- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18- if(Build,VERSION>SDK_INT >= 26){ 
 Boolean isInstall = getPackageManager().canRequestPackageInstalls();//26以上
 if(isInstall){
 //有此权限,安装应用
 }else{
 //跳转到 安装未知应用 权限界面,引导用户开启权限
 Uri selfPackageUri = Uri.parse("package:" + this.getPackageName());
 Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, selfPackageUri);
 startActivityForResult(intent, REQUEST_CODE_UNKNOWN_APP)
 }
 
 
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
 if (requestCode == REQUEST_CODE_UNKNOWN_APP) {
 //如果权限开启,则开始安装应用
 }
 }
- 静态广播无法正常接受 
Android N(7.0) 的新特性
- 私有文件外部将不能访问,通过FileProvider可解决
- SharedPreferences进程间通信模式闪退,- SecurityException
Android 6.0
- 运行时权限的申请 
- https的推荐
3. APK 内容
- assets存放需要打包到- APK中的静态文件
- lib目录- native库
- res目录 存放应用程序的资源
- META-INF 存放应用程序签名和证书的目录
- AndroidManifest.xml
- classes.dex
- resources.arsc资源配置文件
4. Binder 机制的优点
Linux中使用的IPC通信机制有:pipe(管道),signal(信号量),Socket
socket:是一个通用接口,传输效率低,开销比较大;- 管道和消息队列:采用存储转发方式,所以至少需要拷贝2次数据,效率低,共享内存虽然在传输时没有拷贝数据,但其控制机制复杂,而
Binder更好传输性能。- 安全性更高,可以建立私有通道,有身份标识(UID/PID)
- 另外一个优点就是,通过
binder可以很方便的调用server端的方法,犹如调用本地方法一样。
5. Gradle 的生命周期
- 1.初始化 - 初始化主要是读取 - settings.gragle文件,用于确定哪些项目参与构建,并创建- Project实例
- 2.配置 - 配置阶段主要是为每个 - build.gradle文件配置- project对象
- 3.执行 - 主要根据 - gradle命令和传入参数创建并执行任务