您的位置 首页 > 德语词汇

protected storage是什么意思、读音,Android Teleohony 的初始化

各位老铁们好,相信很多人对protected storage是什么意思、读音都不是特别的了解,因此呢,今天就来为大家分享下关于protected storage是什么意思、读音以及Android Teleohony 的初始化的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

1.TeleService的代码入口函数

protected storage是什么意思、读音,Android Teleohony 的初始化

TeleService的代码主要位于packages/services/Telephony路径下。

这里先看下他的几个关键的地方,它的Application

第一个关键的地方属性:android:persistent="true"

第二个关键的地方属性:android:directBootAware="true"

第三个关键的地方属性:android:defaultToDeviceProtectedStorage="true"

第一个属性android:persistent="true":

开发系统级的App时,很有可能就会用persistent属性。当在AndroidManifest.xml中将persistent属性设置为true时,那么该App就会具有如下两个特性:

在系统刚起来的时候,该App也会被启动起来该App被强制杀掉后,系统会重启该App。这种情况只针对系统内置的App,第三方安装的App不会被重启。

在android系统启动完成后,调用了AMS的systemReady的函数后,systemReady函数会检测哪些App具有该属性,并启动他们的Application,并且注册它们的死亡监听,一旦进程死掉会重新拉起,这样TeleService的Application是伴随着系统启动就被拉起来的,但是为了更加快速的启动就用到了第二个以及第三个属性。

用来解决问题为了实现系统应用的快速迁移,新增了两个可在应用级别设置的属性。defaultToDeviceProtectedStorage属性仅适用于系统应用,directBootAware属性则适用于所有应用。

android:directBootAware="true"

android:defaultToDeviceProtectedStorage="true">

应用级别的directBootAware属性的含义是将相应应用中的所有组件均标记为加密感知型组件。defaultToDeviceProtectedStorage属性用于将默认的应用存储位置重定向到DE存储空间(而非CE存储空间)。使用此标记的系统应用必须要仔细审核存储在默认位置的所有数据,并将敏感数据的路径更改为使用CE存储空间。使用此选项的设备制造商应仔细检查要存储的数据,以确保其中不含任何个人信息。这样的话应用可以在还没有开机解锁的时候就快速启动,并访问本地数据。

作为TelephonyApp的应用入口,PhoneApp继承Application,并且在onCreate当中完成一系列的初始化。

代码可以看到,通过UserId来判断,除了系统进程可以初始化应用,其他进程是无法初始化该应用的。这里新建一个PhoneGlobals对象并调用onCreate初始化。最后再调用TelecomAccountRegistry.getInstance(this).setupOnBoot();注册一系列的监听(PhoneStateListener监听,Intent.ACTION_USER_SWITCHED与CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED广播,监听RTT变化的rttUiSettingObserver的观察者)

PhoneGlobals是继承ContextWrapper的上下文类。

最重要的是在它的初始化函数onCreate

初始化函数会解析xml,启动一系列的函数以及注册一系列的广播监听,但是最重要的是上图中的选中代码PhoneFactory.makeDefaultPhones(this),初始化包括(RIL,CDMA,GSM等等一些列的参数)

3.PhoneFactory

代码路径frameworks/opt/telephony/src/java/com/android/internal/telephony/PhoneFactoryPhoneFactory字面意思就可以看出来(电话工厂),管理电话的制作,PhoneFactory调用makeDefaultPhones,然后调用makeDefaultPhone

1.可以看到会获取电话个数,根据电话个数新建多少个RIL对象,一个电话对应一个RIL对象,之前的培训说过,RIL是用来通过HIDL与RILD通信发送指令的,RILD再通过QCRIL与QMI来与MODEM通信的。

2.这里还会根据新建的RIL列表初始化UiccController对象,对SIM卡管理的控制器,它通过UiccCard以及一些列的消息监听来更新SIM卡的信息。

3.然后通过每个卡的Type,通过TelephonyComponentFactory对象创建GsmCdmaPhone对象,这里的telephonyComponentFactory对象要说一下,它是通过ClassLoader反射获取的对象实际上是调用Vendor下编译出来的qti-telephony-common.jar包里面的方法。

新建RIL对象也会做大量的初始化工作,这里看一下RIL.java的构造函数,这里看一下代码:

构造函数中可以看到,它不仅仅有它本身的RaidoResponse与RadioIndication,还有之前学习eMBMS相关的OemHookResponse与OemHookIndication,最后通过getRadioProxy与getOemHookProxy方法获取远程的HIDL对象效用RILD层函数,

getRadioProxy与getOemHookProxy可以看到他们比较类似,当远程对象为空时开始初始化远程HIDL,并将在构造函数中新建的Response与Indication对象发送给RILD方便相互之间的通信,Response为主动请求返回的信息,Indication为modem主动上报的信息。

5.GsmCdmaPhone

GsmCdmaPhone对象作为Telephony业务模型中的关键对象、中心对象,其Java类的定义和继承关系如图:

GsmCdmaPhone又通过telephonyComponentFactory反射对象分别创建了非常关键的三个对象:GsmCdmaCallTracker、ServiceStateTracker、DcTracker,它们将分别承载Telephony业务模型中非常重要的三个业务能力:VoiceCall语音通话、ServiceState网络服务和DataCall移动数据业务,这样App又可以通过TeleService来实现各种的电话业务,有TeleService分发各种功能请求与回调。

6.CallManager与PhoneInterfaceManager

看完如上的PhoneFactory.makeDefaultPhones流程后,再回到PhoneGlobals的初始化函数onCreate中,会继续初始化CallManager,CallerInfoCache,PhoneInterfaceManager,CarrierConfigLoader等等:

其中看CallManager向刚刚PhoneFactory所有创建的GsmCdmaPhone对象注册相关消息(双卡或多卡)而PhoneInterfaceManager的初始化,将服务通过key=phone添加到ServiceManager当中,这样其他地方就可以通过ServiceManager.getService(“phone”)的方式获取到该服务的对象,并调用它的Api

1.TeleService是伴随着Android系统的启动而启动的,只有系统进程才能够初始化TeleService进程。

2.PhoneFactory.makeDefaultPhones作为Telephony业务模型的加载入口。

3.PhoneFactory会新建RILJ,GsmCdmaPhone,UiccController等一系列的对象,它们都是运行在TeleService进程当中的

4.PhoneFactory初始化结束后,会CallManager注册相关消息,并且通过PhoneInterfaceManager的初始化将服务添加到系统服务当中

OK,本文到此结束,希望对大家有所帮助。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023