android开发学习笔记(一)

一、常识补充
    1、Android中的Launcher就是Android系统的桌面,用于启动应用程序;作为Android的系统桌面,用于显示和管理应用程序的快捷图标或者其它桌面组件。    
    2、 (Process Identification)pid = 进程ID
        (User Identification)uid = 拥有该进程的应用程序的用户ID
        ppid = 计算机中代表当前进程的父进程ID
        gid = 拥有该进程的应用程序的组ID
        注意:
            UID在linux中就是用户的ID,表明时哪个用户运行了这个程序,主要用于权限的管理。而在android 中又有所不同,因为android为单用户
            系统,这时UID 便被赋予了新的使命,数据共享,为了实现数据共享,android为每个应用几乎都分配了不同的UID,不像传统的linux,每
            个用户相同就为之分配相同的UID。
    3、Android应用的声明文件Manifest.xml中有时候会对相关的服务标签设置一个android:process=”:...”, 在Android的帮助文档中我们可以了解到,
        一般情况下一个服务没有自己独立的进程,它一般是作为一个线程运行于它所在的应用的进程中。但是也有例外,Android声明文件中的
        android:process属性却可以为任意组件包括应用指定进程,换句话说,通过在声明文件中设置android:process属性,我们可以让组件(例如
        Activity, Service等)和应用(Application)创建并运行于我们指定的进程中。
        注意:
        服务所在进程的名字。通常,一个应用的所有组件都运行在系统为这个应用所创建的默认进程中。这个默认进程是用这个应用的包名来命名的。
        标签的process属性可以设置成和所有组件都不同的默认值。但是这些组件可以通过设置自己的process值来覆写这个默认值,这样可以让你的应
        用跨多进程运行。
        如果被设置的进程名是以一个冒号开头的,则这个新的进程对于这个应用来说是私有的,当它被需要或者这个服务需要在新进程中运行的时候,
        这个新进程将会被创建。如果这个进程的名字是以小写字符开头的,则这个服务将运行在一个以这个名字命名的全局的进程中,当然前提是它有
        相应的权限。这将允许在不同应用中的各种组件可以共享一个进程,从而减少资源的占用。
        例如一个应用运行在进程com.aoyousatuo.example中,android:process属性设置为com.rabbit.man,则新的进程名字为com.rabbit.man
    4、    隐式Intent与显示Intent的区别
        显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,去调用Intent.setComponent()、Intent.setClassName()
        或Intent.setClass()方法或者在new Intent(A.this,B.class)指明需要转向到的Activity,显式意图明确指定了要激活的组件是哪个组件,一般是
        在应用程序内部使用。
        隐式Intent:通过在清单文件中配置IntentFilter来实现的,它一般用在没有明确指出目标组件名称的前提下,当一个应用要激活另一个应用中
        的Activity时(看不到源代码),只能使用隐式意图,根据Activity配置的意图过滤器建一个意图,让意图中的各项参数的值都跟过滤器匹配,
        这样就可以激活其他应用中的Activity。Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到
        最合适的组件来处理这个意图。一般是用于在不同应用程序之间,如果想隐式intent不可以被跨应用启动只需要在AndroidManifest.xml对应的
        activity中配置android:exported="false"即可。
    5、Android HIDL机制
        HIDL是Android8.0新出的一个技能,以service和client的方式实现hal接口,目的是想使Android系统和BSP解绑,使系统升级更加方便。HIDL的
        使用方法一般是先提供.hal文件,然后使用hidl-gen工具生成 框架源文件和Android.bp编译工具文件,之后填充生成的源文件和定制Android.bp
        编译文件
        (以WiFi获取 MacAddress 为例看一下谷歌的实现:https://blog.csdn.net/qq_43804080/article/details/103964276)
    6、Android AIDL机制
        AIDL (Android Interface Definition Language) 是一种接口定义语言,用于生成可以在Android设备上两个进程之间进行进程间通信
        (inter process communication, IPC)的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以
        使用AIDL生成可序列化的参数,来完成进程间通信。
        AIDL的实现一共分为三部分,一部分是客户端,调用远程服务。一部分是服务端,提供服务。最后一部分,也是最关键的是AIDL接口,用来传
        递的参数,提供进程间通信。
    7、Binder的工作原理(待完善!)
        Binder机制的运行主要包括三个部分:注册服务、获取服务和使用服务。
    8、VTS测试
        补充(概念):
            VTS 全称是 Vendor Test Suite,意思是 Project Treble 中引入 Vendor Interface 的目的是将 Android Framework 与 HAL 分开,并通过 VTS 测试来对这些 Vendor
            Interface 进行测试以确保 HAL 的向前兼容。
        只看这一段可能还是描述得不太清楚。我们知道仅管 APP 层与 Framework 层在设计上是分开的, 但通过 CTS 测试,确保了 APP 与
            Android Framework 之间有一致的调用接口(API),这使得 APP 开发者编写的同一款程序可以运行在不同系统版本(向前兼容)、不同硬
            件平台、不同厂商制造的不同设备上。
        VTS 类似 CTS,通过对 Vendor Interface 进行测试,确保同一个版本的 Android Framework 可以运行在不同 HAL 上,或不同 Android
            Framework 可以运行在 同一个 HAL 上。
        通过这样的 Framework / HAL 分离设计和接口一致性保证,也使得 8.0 版本之后的 Android 系统在进行升级时,可以直接对 Framework
            进行升级而不用考虑 HAL 层的改动,从而缩短了用户手上设备得到系统升级 OTA 推送的时间。
        注意:VTS测试所用的谷歌镜像路径(\\172.16.3.136\Ori_Test_Env\Google_Ori_Env\VTS\VTS_Q_10.0)
        1.测试步骤
            run vts #VTS全局测试
            run vts -m VtsHalAudioV2_0Target #单模块测试
            run vts -m VtsHalAudioV2_0Target -t HidlHalGTest#AudioPatchPrimaryHidlTest.AudioPatches_64bit #单项测试
        2.测试logs、results路径
            06-21 14:43:34 I/ResultReporter: Test Result: /home/coolpad/VTS/8.1R3/android-vts/results/2018.06.21_14.43.13/test_result_failures.html
            06-21 14:43:34 I/ResultReporter: Test Logs: /home/coolpad/VTS/8.1R3/android-vts/logs/2018.06.21_14.43.13
            06-21 14:43:34 D/ResultReporter: Full Result: /home/coolpad/VTS/8.1R3/android-vts/results/2018.06.21_14.43.13.zip
            06-21 14:43:34 I/ResultReporter: Invocation finished in 20s. PASSED: 1, FAILED: 0, MODULES: 1 of 1
    9、synchronized用法
        一共两种用法:
            1.放在方法前面声明方法
            2.synchronized(xxx){ //TODO} 形成代码块
二、Android Settings            
    Android Settings源码分为两个部分,分别为“packages/apps/Settings”和“frameworks/base/packages/SettingsLib”
        1.Settings目录结构
            android\packages\apps\Settings
            - src
                - - com.android.settings Settings应用整体所用的java文件
                - - com.android.settings.accessibility 辅助功能相关
                - - com.android.settings.accounts 账户相关
                - - com.android.settings.application 应用管理相关
                - - com.android.settings.backup 备份相关
                - - com.android.settings.bluetooth 蓝牙相关
                - - com.android.settings.dashboard Settings主界面相关
                - - com.android.settings.datausage 数据流量相关
                - - com.android.settings.deletionhelper
                - - com.android.settings.deviceinfo 关于手机相关
                - - com.android.settings.display 显示相关
                - - com.android.settings.drawable 菜单图片相关
                - - com.android.settings.fingerprint 指纹相关
                - - com.android.settings.fuelgauge
                - - com.android.settings.gestures 手势相关
                - - com.android.settings.inputmethod 输入法相关
                - - com.android.settings.localepicker 语言相关
                - - com.android.settings.location 位置相关
                - - com.android.settings.nfc nfc相关
                - - com.android.settings.notification 通知相关相关
                - - com.android.settings.overlay
                - - com.android.settings.password 密码相关
                - - com.android.settings.print 打印相关
                - - com.android.settings.qstile
                - - com.android.settings.search 快速搜索相关
                - - com.android.settings.sim SIM卡相关
                - - com.android.settings.support
                - - com.android.settings.tts tts播报相关
                - - com.android.settings.users 用户相关
                - - com.android.settings.utils 工具类
                - - com.android.settings.voice
                - - com.android.settings.vpn2
                - - com.android.settings.wfd
                - - com.android.settings.widget 小部件相关
                - - com.android.settings.wifi wifi相关
            - AndroidManifest.xml 清单文件
        2.SettingsLib目录结构
            android\frameworks\base\packages\SettingsLib\src\com\android\settingslib
            - src
                - - com.android.settingslib.accessibility 辅助功能相关
                - - com.android.settingslib.accounts 账户相关
                - - com.android.settingslib.animation 动画相关
                - - com.android.settingslib.application 应用管理相关
                - - com.android.settingslib.bluetooth 蓝牙相关
                - - com.android.settingslib.datetime 日期相关
                - - com.android.settingslib.deviceinfo 关于手机相关
                - - com.android.settingslib.display 显示相关
                - - com.android.settingslib.drawable 菜单图片相关
                - - com.android.settingslib.drawer 侧滑菜单相关
                - - com.android.settings.dream 休眠相关
                - - com.android.settings.graph
                - - com.android.settings.location 位置相关
                - - com.android.settings.net 网络相关
                - - com.android.settings.users 用户相关
                - - com.android.settings.widget 小部件相关
                - - com.android.settings.wifi wifi相关
            - AndroidManifest.xml 清单文件
        3.总结
             Settings主要的功能一句话描述:保存用户设置的值到Settings数据库,其他应用或Framework层通过监听SettingsProvider数据库的变化,
             来做一些相应的处理操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值