Android知识点总结二

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)
    }

    @Override
    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 命令和传入参数创建并执行任务

-------------本文结束感谢您的阅读-------------