原创 Android Region代碼分析

一、Region的定義和合法性檢查 在Android系統中,定義了Region的概念,它代表屏幕上的一個區域,它是由一個或多個Rect組成的,代碼位於frameworks/native/libs/ui/Region.cpp。而Rect則代

原创 Problem 62 Java中的final關鍵字?

Problem 62 Java中的final關鍵字? Ans:    在Java中,通常將作爲常量的變量聲明爲final,表示其值不可更改,如果該變

原创 Android系統初始化過程分析(Android 4.3)

在內核初始化完成後,最後會啓動第一個用戶空間進程,路徑名爲/init,它對應的代碼是在/system/core/init/init.c。 下面將從main函數開始一步步分析其中的執行過程。       if (!strcmp(basen

原创 Binder通信相關的類簡要分析

一、BpBinder 這個類通常作爲IPC通信的Client端,或者說Remote端,提供實際的IPC基礎通信服務。在代碼中通常不直接使用到該類,一般以成員變量的形式,包含於BpRefBase類中,通過remote()方法引用該成員變量。

原创 Problem 63 何時該用glDrawTexiOES?

Problem 63 何時該用glDrawTexiOES? Ans:          首先,這個函數的作用是將指定的紋理貼到視圖中的一個矩形區域,無須座標變換,渲染速度加快。 使用的步驟大概如下:        glGenTexture

原创 Service Manger的初始化分析

         在init.rc文件中,有定義serviceservicemanager /system/bin/servicemanager,在系統初始化會解析init.rc文件時,遇到這句話,將會把servicemanager加載到

原创 Problem 66 Java異常基類Throwable?

Problem 66 Java異常基類Throwable? Ans: Throwable類是Java語言中所有錯誤和異常的基類。只有此類及其子類的實例才能被JVM或Java代碼中作爲異常拋出,同時catch語句也只接受Throwable類

原创 Binder結點死亡通知過程

BpBinder類代表一個遠程Binder對象(繼承自BpRefBase)的通信功能部分。它提供了linkToDeath方法,供其他對象監聽自己所關聯的本地結點的死亡通知,本質上是通過調用IPCThreadState類的requestDe

原创 binder IPC TRANSACTION過程分析(BC_TRANSACTION->Binder Driver)

在Binder IPC通信過程中,進程間通信都要先通過向Binder驅動發送BC_XXX命令,然後Binder 驅動稍做處理後通過對應的BR_XXX將命令轉給給目標進程。 如果有返回值,進程也是先將返回結果以BC_REPLY的形式先發給B

原创 Binder結點管理

在Binder驅動中,Binder結點隨着進程IPC通信開始而生,隨着進程IPC通信結束而亡,換句話說,Binder結點是維繫IPC通信的基礎,而且一個Binder結點也只能在完全無IPC通信的情況下被刪除。本文將重點研究Binder結點

原创 Zygote啓動分析

         基於性能的考慮,Dalvik虛擬機只啓動一次,新的實例將從第一次啓動的Dalvik中拷貝。這個功能是通過系統服務Zygote來實現的。    Zygote的啓動過程簡述如下:首先,它預初始化和預加載通用的Android類

原创 Binder通信過程中的用戶空間線程池的管理

在Binder通信機制裏,客戶端與服務端之間的通信是在專門的IPC通信線程中進行的。這些線程構成一個線程池。線程的創建和銷燬是在用戶空間進行的,而對線程的控制是在驅動層進行的,即驅動控制線程池中線程的生命,而線程本身則是運行在用戶空間的。

原创 Problem 65 怎樣表示指向結構體或類的成員函數的指針?

Problem 65 怎樣表示指向結構體或類的成員函數的指針? Ans:     要想通過函數指針引用一個結構體或類的成員函數,然後通過該指針來調用該成員函數,如何表示呢? 示例如下: 假設有如下一個結構體定義如下: struct X {

原创 Problem 61 修改進程的顯示名稱

Problem 61 修改進程的顯示名稱? Ans: 要更改一個進程的顯示名稱,需要使用系統調用 prctl(), 其中PR_SET_NAME可用於修改進程顯示名字。 測試程序: # include <stdio.h> # includ

原创 Android Looper類代碼分析

本文將分析一下Looper類的實現及其應用,代碼位於 frameworks/native/lib/utils/Looper.cpp。主要分爲如下幾個部分: 1. epoll系統調用接口簡介 2. Looper類代碼分析 3. Looper