免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Android RIL 架構(gòu)學(xué)習(xí)總結(jié)

 

1.Android RIL 概念     (轉(zhuǎn)自http://newfaction.net/2011/03/08/android-ril-structure-learning-summary.html)

Android RIL是基于telephony 服務(wù)和raido 硬件層的抽象層, 通過研究RIL的代碼可以看到,Android的rild庫是介于HAL接口與basebandmodem之間,它同樣提供了語音、數(shù)據(jù)、短信、SIM卡管理以及STK應(yīng)用的功能,實現(xiàn)思路跟微軟的RIL有異曲同工之妙,也是把標(biāo)準(zhǔn)的 GSM27.007中常用的如dial這些做主動請求的操作稱之為request,一共75個;另外一類GSM模塊主動上報的例如信號強度、基站信息等,稱之為unsolicited response,一共17個;開發(fā)模式也是跟微軟RIL開發(fā)差不多,需要針對不同的GSM模塊進(jìn)行不同的GSM驅(qū)動開發(fā),公用的部分google給你做好了,特定的部分需要你自己去定制,這樣做可以大大地提高開發(fā)效率。以下是RIL 交互圖


2.本地代碼 :

 

RIL 支持的本地代碼包括 ril 庫和守護(hù)進(jìn)程:

hardware/ril/include

hardware/ril/libril

hardware/ril/rild

hardware/ril/reference-ril編譯結(jié)果是

/system/bin/rild :守護(hù)進(jìn)程

/system/lib/libril.so : RIL 的庫

/system/lib/libreference-ril.so : RIL 參考庫3.RILInitialization

Android initializes the telephony stack andthe Vendor RIL at startup as described in the sequence below:

(1). RIL daemon reads rild.lib path andrild.libargs system properties to determine the Vendor RIL library to use andany initialization arguments to provide to the Vendor RIL

(2). RIL daemon loads the Vendor RILlibrary and calls RIL_Init to initialize the RIL and obtain a reference to RILfunctions

(3). RIL daemon calls RIL_register on theAndroid telephony stack, providing a reference to the Vendor RIL functions

See the RIL Daemon source code at//device/commands/rild/rild.c for details.

4.rild 執(zhí)行流程

rild 是一個守護(hù)進(jìn)程,在這里宏RIL_SHLIB 被定義。執(zhí)行的過程為:

獲取參數(shù) -> 打開功能庫 -> 建立事件循環(huán)(線程) -> 執(zhí)行 RIL_Init ->RIL_register 。

  1.    
  2. int main(int argc,  
  3. char **argv)  
  4.    
  5.    {  
  6.    
  7.    /*獲取參數(shù)并解析 */  
  8.    
  9.       dlHandle = dlopen(rilLibPath, RTLD_NOW);  
  10.    
  11.    /*啟動線程,進(jìn)入事件循環(huán) */  
  12.    
  13.       RIL_startEventLoop();  
  14.    
  15.       rilInit = (const RIL_RadioFunctions *(*)(const struct RIL_Env *, int,char  
  16.    
  17. **))  
  18.    
  19.                   dlsym(dlHandle,"RIL_Init");  
  20.    
  21.    /*處理參數(shù) */  
  22.    
  23.       funcs = rilInit(&s_rilEnv, argc, rilArgv);  
  24.    
  25.       RIL_register(funcs);  
  26.    
  27.   done:  
  28.    
  29.       while(1) {  
  30.    
  31.           sleep(0x00ffffff);  
  32.    
  33.       }  
  34.    
  35.    }  



5.RIL Interaction

RIL有兩種執(zhí)行流程儲:

(1)Solicited commands: 基于RIL lib, 例如 DIAL andHANGUP.

(2)Unsolicited responses: 基于 baseband, 例如CALL_STATE_CHANGED和 NEW_SMS.

5.1 Solicited

以下兩段代碼是請求類接口:

void OnRequest (int request_id, void *data,size_t datalen, RIL_Token t);

void OnRequestComplete (RIL_Token t,RIL_Error e, void *response, size_t responselen);The following diagramillustrates a solicited call in Android.


5.2 Unsolicited

以下代碼是非請求類接口:

void OnUnsolicitedResponse (intunsolResponse, void *data, size_t datalen);The following diagram illustrates anunsolicited call in Android.


6.RIL_Init

使用自定義的RIL lib 時,由于rild通過符號RIL_Init獲取一組函數(shù)指針并以此與之建立聯(lián)系,因而必須實現(xiàn)RIL_Init 函數(shù),,RIL_Init 的定義如下:

RIL_RadioFunctions *RIL_Init (RIL_Env* env,int argc, char **argv);RIL_Init should return a RIL_RadioFunctions structurecontaining the handles to the radio functions:

  1. type structure {  
  2.        int RIL_version;  
  3.        RIL_RequestFunc onRequest;  
  4.        RIL_RadioStateRequest onStateRequest;       
  5.        RIL_Supports supports;  
  6.        RIL_Cancel onCancel;  
  7.        RIL_GetVersion getVersion;  
  8. }  


RIL_RadioFunctions;7.接下來分析初始化流程

主入口是rild.c中的main函數(shù),主要完成三個任務(wù):

(1). 開啟libril.so中的event機制, 在RIL_startEventLoop中,是最核心的由多路I/O驅(qū)動的消息循環(huán)。

(2). 初始化librefrence_ril.so,也就是跟硬件或模擬硬件modem通信的部分(后面統(tǒng)一稱硬件), 通過RIL_Init函數(shù)完成。

(3). 通過RIL_Init獲取一組函數(shù)指針RIL_RadioFunctions, 并通過RIL_register完成注冊,并打開接受上層命令的socket通道。

8.RIL跟上層通訊主要采用兩種方式:

(1)一種是通過Socket發(fā)送與接收消息的方式來實現(xiàn),

C方面,這個Socket在ril.cpp里面可以找到它的創(chuàng)建代碼:

  1. s_fdListen =android_get_control_socket(SOCKET_NAME_RIL);JAVA方面,在RIL.java中:  
  2.          s = new LocalSocket();  
  3.          l = new LocalSocketAddress(SOCKET_NAME_RIL,  
  4.                            LocalSocketAddress.Namespace.RESERVED);  


         s.connect(l);(2)還有另外一種方式就是直接通過TCP/IP直接訪問內(nèi)核中的shared memory,進(jìn)行RPC調(diào)用,這種方式主要應(yīng)用在數(shù)據(jù)模式上,一來由于Android的每個Activity隨時都會有可能需要網(wǎng)絡(luò)連接接收發(fā)送數(shù)據(jù),因此必須提供一種實時性較高訪問的方式,二來可以提高通訊效率。

參考資料:

http://www.netmite.com/android/mydroid/development/pdk/docs/telephony.html


========================================================

Android 2.2 RIL hardware 部分代碼簡介

Android源碼中,hardware/ril目錄中包含著RILhardware 底層源碼,該目錄樹如下引用部分,下面將做具體的分析:

|– CleanSpec.mk

|– include

| `– telephony

| |– ril.h

| `– ril_cdma_sms.h

|– libril

| |– Android.mk

| |– MODULE_LICENSE_APACHE2

| |– NOTICE

| |– ril.cpp

| |– ril_commands.h

| |– ril_event.cpp

| |– ril_event.h

| `– ril_unsol_commands.h

|– reference-cdma-sms

| |– Android.mk

| |– reference-cdma-sms.c

| `– reference-cdma-sms.h

|– reference-ril

| |– Android.mk

| |– MODULE_LICENSE_APACHE2

| |– NOTICE

| |– at_tok.c

| |– at_tok.h

| |– atchannel.c

| |– atchannel.h

| |– misc.c

| |– misc.h

| `– reference-ril.c

`– rild

|– Android.mk

|– MODULE_LICENSE_APACHE2

|– NOTICE

|– radiooptions.c

|– rild.c

`– rild.c~

一、目錄hardware/ril/include

 

包含兩個頭文件: ril.h 和 ril_cdma_sms.h ,其中 ril.h中定義了76個如下類型的宏:RIL_REQUEST_XXX ,這些宏代表著客戶進(jìn)程可以向Android telephony發(fā)送的命令,包括SIM卡相關(guān)的功能,打電話,發(fā)短信,網(wǎng)絡(luò)信號查詢等。 ril_cdma_sms.h 則是針對cdma sms 的擴(kuò)展時所用到的一些宏和結(jié)構(gòu)體的定義。

二、目錄hardware/ril/libril

該目錄下代碼負(fù)責(zé)與上層客戶進(jìn)程進(jìn)行交互。在接收到客戶進(jìn)程命令后,調(diào)用相應(yīng)函數(shù)進(jìn)行處理,然后將命令響應(yīng)結(jié)果傳回客戶進(jìn)程。在收到來自網(wǎng)絡(luò)端的事件后,也傳給客戶進(jìn)程。

1、文件ril_commands.h:列出了telephony可以接收的命令;每個命令對應(yīng)的處理函數(shù);以及命令響應(yīng)的處理函數(shù)。諸如:

   {RIL_REQUEST_GET_SIM_STATUS, dispatchVoid, responseSimStatus},

   {RIL_REQUEST_ENTER_SIM_PIN, dispatchStrings, responseInts},

   {RIL_REQUEST_ENTER_SIM_PUK, dispatchStrings, responseInts},

   {RIL_REQUEST_ENTER_SIM_PIN2, dispatchStrings, responseInts},

   {RIL_REQUEST_ENTER_SIM_PUK2, dispatchStrings, responseInts},

   {RIL_REQUEST_CHANGE_SIM_PIN, dispatchStrings, responseInts},

   ... .. ..2、文件ril_unsol_commands.h:列出了telephony可以接收的事件類型;對每個事件的處理函數(shù);諸如:

   {RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED, responseVoid, WAKE_PARTIAL},

   {RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED, responseVoid, WAKE_PARTIAL},

   {RIL_UNSOL_RESPONSE_NETWORK_STATE_CHANGED, responseVoid, WAKE_PARTIAL},

   {RIL_UNSOL_RESPONSE_NEW_SMS, responseString, WAKE_PARTIAL},

   {RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT, responseString,WAKE_PARTIAL},

   {RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM, responseInts, WAKE_PARTIAL},

    .. . . . .3、文件ril_event.h/cpp:處理與事件源(端口,modem等)相關(guān)的功能。ril_event_loop監(jiān)視所有注冊的事件源,當(dāng)某事件源有數(shù)據(jù)到來時,相應(yīng)事件源的回調(diào)函數(shù)被觸發(fā)(firePending -> ev->func())。

4、文件ril.cpp 功能較為龐大,如下:

1)RIL_register函數(shù):打開監(jiān)聽端口,接收來自客戶進(jìn)程的命令請求 (s_fdListen = android_get_control_socket(SOCKET_NAME_RIL);),當(dāng)與某客戶進(jìn)程連接建立時,調(diào)用 listenCallback函數(shù);創(chuàng)建一單獨線程監(jiān)視并處理所有事件源 (通過ril_event_loop)

2)listenCallback函數(shù):當(dāng)與客戶進(jìn)程連接建立時,此函數(shù)被調(diào)用。此函數(shù)接著調(diào)用processCommandsCallback處理來自客戶進(jìn)程的命令請求

3)processCommandsCallback函數(shù):具體處理來自客戶進(jìn)程的命令請求。對每一個命令,ril_commands.h中都規(guī)定了對應(yīng)的命 令處理函數(shù)(dispatchXXX),processCommandsCallback會調(diào)用這個命令處理函數(shù)進(jìn)行處理。

4)dispatch系列函數(shù):此函數(shù)接收來自客戶進(jìn)程的命令己相應(yīng)參數(shù),并調(diào)用onRequest進(jìn)行處理。

5)RIL_onUnsolicitedResponse函數(shù):將來自網(wǎng)絡(luò)端的事件封裝(通過調(diào)用responseXXX)后傳給客戶進(jìn)程。

6)RIL_onRequestComplete函數(shù):將命令的最終響應(yīng)結(jié)構(gòu)封裝(通過調(diào)用responseXXX)后傳給客戶進(jìn)程。

7)response系列函數(shù):對每一個命令,都規(guī)定了一個對應(yīng)的response函數(shù)來處理命令的最終響應(yīng);對每一個網(wǎng)絡(luò)端的事件,也規(guī)定了一個對應(yīng)的 response函數(shù)來處理此事件。response函數(shù)可被onUnsolicitedResponse或者onRequestComplete調(diào)用。

三、目錄hardware/ril/reference-ril

本目錄下代碼主要負(fù)責(zé)與modem(調(diào)制解調(diào)器)進(jìn)行交互。

1、文件reference-ril.c:

此文件核心是兩個函數(shù):onRequest和onUnsolicited

1) onRequest 函數(shù):在這個函數(shù)里,對每一個RIL_REQUEST_XXX請求,都轉(zhuǎn)化成相應(yīng)的ATcommand,發(fā)送給modem,然后睡眠等待。當(dāng)收到此AT command的最終響應(yīng)后,線程被喚醒,將響應(yīng)傳給客戶進(jìn)程(RIL_onRequestComplete -> sendResponse)。

2) onUnsolicited函數(shù):這個函數(shù)處理modem從網(wǎng)絡(luò)端收到的各種事件,如網(wǎng)絡(luò)信號變化,撥入的電話,收到短信等。然后將時間傳給客戶進(jìn)程(RIL_onUnsolicitedResponse -> sendResponse)。

2、文件atchannel.c:

負(fù)責(zé)向modem讀寫數(shù)據(jù)。其中,寫數(shù)據(jù)(主要是AT command)功能運行在主線程中,讀數(shù)據(jù)功能運行在一個單獨的讀線程中。

函數(shù)at_send_command_full_nolock:運行在主線程里面。將一個AT command命令寫入modem后進(jìn)入睡眠狀態(tài)(使用 pthread_cond_wait或類似函數(shù)),直到modem讀線程將其喚醒。喚醒后此函數(shù)獲得了AT command的最終響應(yīng)并返回。函數(shù)readerLoop運行在一個單獨的讀線程里面,負(fù)責(zé)從modem中讀取數(shù)據(jù)。讀到的數(shù)據(jù)可分為三種類型:網(wǎng)絡(luò)端傳入的事件;modem對當(dāng)前AT command的部分響應(yīng);modem對當(dāng)前AT command的全部響應(yīng)。對第三種類型的數(shù)據(jù)(AT command的全部響應(yīng)),讀線程喚醒(pthread_cond_signal)睡眠狀態(tài)的主線程。

3、文件at_tok.c 提供AT響應(yīng)的解析函數(shù)

4、misc.c 字面意思雜項,里面就提供一個字符串匹配函數(shù)

四、目錄hardware/ril/rild

該目錄下的代碼主要是為了生成rild 和 radiooptions 的可執(zhí)行文件

1、radiooptions.c 生成radiooptions 的可執(zhí)行文件, radooptions程序僅僅是把命令行參數(shù)傳遞給socket{rild-debug}去處理而已,從而達(dá)到與rild通信,可供調(diào)試時配置Modem參數(shù)。

2、rild.c 生成 rild 的可執(zhí)行文件有關(guān)rild 進(jìn)程的介紹看 AndroidRIL架構(gòu)學(xué)習(xí)總結(jié)


=================================================

Android 2.2 RIL Java 部分代碼簡介

Android中,telephony相關(guān)的java代碼主要在下列目錄中:

1.frameworks/base/telephony/java/android/telephony

2.frameworks/base/telephony/java/com/android/internal/telephony

3.frameworks/base/services/java/com/android/server/TelephonyRegistry.java

4. packages/apps/Phone其中,目錄1中的代碼提供Android telephony的公開接口,任何具有權(quán)限的第三方應(yīng)用都可使用,如接口類TelephonyManager。目錄2、3中的代碼提供一系列內(nèi)部接口,目前第三方應(yīng)用還不能使用,當(dāng)前似乎只有packages/apps/Phone能夠使用。目錄4是一個特殊應(yīng)用,或者理解為一個平臺內(nèi)部進(jìn)程。其他應(yīng)用通過intent方式調(diào)用這個進(jìn)程的服務(wù)。

TelephonyManager

TelephonyManager主要使用兩個服務(wù)來訪問telephony功能:

1. ITelephony, 提供與telephony 進(jìn)行操作,交互的接口,在packages/apps/Phone中由PhoneInterfaceManager.java實現(xiàn)。

2. ITelephonyRegistry, 提供登記telephony事件的接口。由frameworks/base/services/java/com/android/server/TelephonyRegistry.java實現(xiàn)。

interface CommandsInterface

interface CommandsInterface 描述了對電話的所有操作接口,如命令,查詢狀態(tài),以及電話事件監(jiān)聽等

class BaseCommands是CommandsInterface的直接派生類,實現(xiàn)了電話事件的處理(發(fā)送message給對應(yīng)的handler)。

而class RIL又派生自BaseCommands。RIL負(fù)責(zé)實際實現(xiàn)CommandsInterface中的接口方法。RIL通過Socket和rild守護(hù)進(jìn)程進(jìn)行通訊。對于每一個命令接口方法,如acceptCall,或者狀態(tài)查詢,將它轉(zhuǎn)換成對應(yīng)的RIL_REQUEST_XXX,發(fā)送給rild。線程 RILReceiver監(jiān)聽socket,當(dāng)有數(shù)據(jù)上報時,讀取該數(shù)據(jù)并處理。讀取的數(shù)據(jù)有兩種,

1. 電話事件,RIL_UNSOL_xxx, RIL讀取相應(yīng)數(shù)據(jù)后,發(fā)送message給對應(yīng)的handler (詳見函數(shù)processUnsolicited)

2. 命令的異步響應(yīng)。(詳見函數(shù)processSolicited)

interface Phone

interface Phone描述了對電話的所有操作接口。 PhoneBase直接從Phone 派生而來。而另外兩個類,CDMAPhone和GSMPhone,又從PhoneBase派生而來,分別代表對CDMA 和GSM的操作。

PhoneProxy也從Phone直接派生而來。當(dāng)當(dāng)前不需要區(qū)分具體是CDMAPhone還是GSM Phone時,可使用PhoneProxy。

抽象類Call代表一個call,有兩個派生類CdmaCall和GsmCall。

interface PhoneNotifier

interface PhoneNotifier定義電話事件的通知方法

DefaultPhoneNotifier從PhoneNotifier派生而來。在其方法實現(xiàn)中,通過調(diào)用service ITelephonyRegistry來發(fā)布電話事件。

service ITelephonyRegistey由frameworks/base/services/java/com/android/server/TelephonyRegistry.java實現(xiàn)。這個類通過廣播intent,從而觸發(fā)對應(yīng)的broadcast receiver。

在PhoneApp創(chuàng)建時,sPhoneNotifier = new DefaultPhoneNotifier();…sCommandsInterface = new RIL(context, networkMode,cdmaSubscription);

然后根據(jù)當(dāng)前phone是cdma還是gsm,創(chuàng)建對應(yīng)的phone,如:sProxyPhone = newPhoneProxy(new GSMPhone(context,sCommandsInterface, sPhoneNotifier));

下面我們來研究一個電話打出去的流程。

1. TwelveKeyDialer.java, onKeyUp()

2. TwelveKeyDialer.java, placeCall()

3. OutgoingCallBroadcaster.java, onCreate()

sendOrderedBroadcast(broadcastIntent,PERMISSION,

new OutgoingCallReceiver(), null,Activity.RESULT_OK, number, null);

4. OutgoingCallBroadcaster.java,OutgoingCallReceiver

doReceive ->context.startActivity(newIntent);

5. InCallScreen.java, onCreate/onNewIntent

6. InCallScreen.java, placeCall

7. PhoneUtils.java, placeCall

8. GSMPhone.java, dial

9. GsmCallTracker.java, dial

10. RIL.java, dial

RILRequest rr =RILRequest.obtain(RIL_REQUEST_DIAL, result);

send(rr);

下面來研究一個incoming call的流程:

1. 創(chuàng)建GsmPhone時,mCT = newGsmCallTracker(this);

2. 創(chuàng)建GsmCallTracker時:

cm.registerForCallStateChanged(this,EVENT_CALL_STATE_CHANGE, null); –>

mCallStateRegistrants.add(r);

3. RIL中的RILReceiver線程首先讀取從rild中傳來的數(shù)據(jù):processResponse -> processUnsolicited

4. 對應(yīng)于incoming call,RIL收到RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED消息,觸發(fā)mCallStateRegistrants中的所有記錄。

5. GsmCallTracker處理EVENT_CALL_STATE_CHANGE,調(diào)用pollCallsWhenSafe

6. 函數(shù)pllCallsWhenSafe 處理:

lastRelevantPoll =obtainMessage(EVENT_POLL_CALLS_RESULT);

cm.getCurrentCalls(lastRelevantPoll);

7. RIL::getCurrentCalls

RILRequest rr =RILRequest.obtain(RIL_REQUEST_GET_CURRENT_CALLS, result);

send(rr);

8. 接著RIL調(diào)用processSolicited處理RIL_REQUEST_GET_CURRENT_CALLS的返回結(jié)果

9. GsmCallTracker的handleMessage被觸發(fā),處理事件EVENT_POLL_CALLS_RESULT,調(diào)用函數(shù)

handlePollCalls

10. handlPollCalls 調(diào)用

phone.notifyNewRingingConnection(newRinging);

11. PhoneApp中創(chuàng)建CallNotifier

12. CallNotifier注冊:

registerForNewRingingConnection ->mNewRingingConnectionRegistrants.addUnique(h, what, obj);

hardware 相關(guān)可以參考:Android2.2 RIL hardware 部分代碼簡介

======================================================


Android phone app 默認(rèn)啟動理解以及對Java端入口的分析


Android phone app 默認(rèn)的進(jìn)程是com.android.phone ,該進(jìn)程有個特性,當(dāng)你kill 它時,它會重新在創(chuàng)建。很多人可能沒弄清為什么,它的運行模式和其他app不同呢?以下我將個人的簡單認(rèn)識稍未闡述下:

1、首先PhoneApp.apk 存放于System/app 目錄下,這決定了它擁有超于其他data/app 權(quán)限的能力。顯然是因為它有系統(tǒng)級的屬性。

2、其次在AndroidManifest.xml 中有以下描述:

   <application android:name="PhoneApp"

                android:persistent="true"

                android:label="@string/dialerIconLabel"

                 android:icon="@drawable/ic_launcher_phone">其中 android:persistent=”true”決定了它必須一只運行,官方對該屬性的說明如下:

android:persistent

   Whether or not the application should remain running at all times —"true" if it should, and "false" if not. The default valueis "false". Applications should not normally set this flag;persistence mode is intended only for certain system applications.

以上兩部分內(nèi)容決定了com.android.phone,該進(jìn)程將一值存在于系統(tǒng)中。

默認(rèn)啟動的App,沒有調(diào)用Activity,那它默認(rèn)的Java入口是那里?調(diào)用了什么類包?

Android 的應(yīng)用進(jìn)程都是fork出來的,而且fork出的進(jìn)程是直接進(jìn)入自己的事件循環(huán),拿個一般的App的啟動流程來分析:

1、首先點擊一個并未啟動的應(yīng)用Venus,這時它會先fork出一個進(jìn)程,然后進(jìn)入它自己的事件循環(huán)。

2、進(jìn)入事件循環(huán)的之后做的第一件事并不是為了做響應(yīng)點擊事件的處理,而是檢測該App是否有Application 的默認(rèn)入口,如上例子中的:android:name=”PhoneApp”就是Application 的入口類包名。有的話檢測該類是否繼承于Application, 沒有入口的話,進(jìn)入第三步

3、接著響應(yīng)點擊事件,ActivityManager 就找尋該應(yīng)用對應(yīng)的MainActivity入口,并創(chuàng)建該類.

總結(jié)PhoneApp 的Java端入口

以PhoneApp.java 類內(nèi)容來看

  1. package com.android.phone;  
  2.    
  3. import *****;  
  4.    
  5. /** 
  6.  * Top-level Application class for the Phone app. 
  7.  */  
  8. public class PhoneApp extends Application implements AccelerometerListener.OrientationListener {  
  9.     /* package */ static final String LOG_TAG = "PhoneApp";  
  10.    
  11.     private static PhoneApp sMe;  
  12.    
  13.     public PhoneApp() {  
  14.         sMe = this;  
  15.     }  
  16.    
  17.     static PhoneApp getInstance() {  
  18.         return sMe;  
  19.     }  
  20.    
  21. }  

以上面代碼來看,繼承于Application 的PhoneApp 當(dāng)作了phone進(jìn)程的入口。

   public PhoneApp() {

       sMe = this;

    }該方法說明繼承于Application的類,必須可以被外部實例, 實際上在啟動過程中,如果有該入口,就是必須先實例該類的。Android 提供該部分接口,是為了有些應(yīng)用需要常駐內(nèi)存。這些應(yīng)用可能需要提供一些provider或service之類,但這些功能又必須先于Activity而存在,因而提供該入口讓java 的應(yīng)用有個類似于main函數(shù)的入口,做些初始化的工作。

  

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android的電話功能介紹
Android技術(shù)專題系列之二--telephony
短息接收
Android電話系統(tǒng)rild
Android核心分析(17) ------電話系統(tǒng)之rilD
ANDROID的APN設(shè)置
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服