2011-10-11第一次勘誤特別感謝jdxwind網友的大力支援。對所有給本書提bug的童鞋們表示衷心的感謝。
1. 目錄XIII ——StartThread_Pool,joinThread_Pool。這兩個單詞中間的Pool沒有空格。P149頁中的目錄項也需要修改。
2. P15,模組_jni.so,中間多了空格。
3. P388 代碼,Mutext::Autolock 和下面的注釋未予sp<BufferSource>一行對齊
4. P233頁:因為讀者可能在等待可寫的,改成:因為寫者可能在等待可寫的..
5. P234頁:offset是外界傳入的基於userBase的一個位移量,它的值是userBase+512,
這句話改為:offset的值是user(此時等於1024),而userBase也是1024,所以.....
6. P460頁:在標題 MTD的介紹那,需要加上引用: 如所示
7. P101:如果c為1,則弱引用計數為0,這說明沒用弱引用指向實際對象,.....改成沒有弱引用...
8. P325頁下方,[-->SurfaceControl.cpp]改成[-->Surface.cpp]
9. P174:第二行,AudioRcorder----改成AudioRecord
10. P120頁:這三條彙編指令,如果按正常的順序連續執行,是沒有問題的,但在多線程時就不能保證了。例如,線程1在執行第一條指令後,線程2由於調度的原因,搶先線上程1之前連續執行完了三條指令。這樣,線程1繼續執行指令時,它所使用的值就不是線程2更新後的值,而是之前的舊值。再對這個值進行操作便沒有意義了。改成:這三條彙編指令,如果按正常的順序連續執行,是沒有問題的,但在多線程時就不能保證了。例如,線程1在執行第一條指令後,線程2由於調度的原因,搶先線上程1之前連續執行完了三條指令。這樣,線程1繼續執行指令時,它所使用的值卻是線程2更新後的值,而非之前的值。再對這個值進行操作就有可能造成錯誤的結果。
11. P133 代碼:AutoMutex _l(gProcessMutex); 代碼排版有問題;應該和下面的if語句對齊
12. P97: mRefs是引用計數管理的關鍵類----這句話改成mRefs所屬的weakref_impl類是引用計數管理的關鍵類
13. P97:最後一個程式碼片段:內容改成:
weakref_impl(RefBase* base)
:mStrong(INITIAL_STRONG_VALUE)//這裡的注釋不變
,mWeak(0)
,mBase(base)
,mFlags(0)
{
}
14. P109頁:我們先分析Threa 類----》改成我們先分析Thread類
15. 第五章,凡是出現Thread.cpp的,均換成Threads.cpp。包括前面的檔案位置。謝謝
16. P115:顯示調用Mutex----》改成顯式調用Mutex
17. P434:程式碼片段I:[-->Ril.cpp]改成[-->Ril_event.cpp]。本章的檔案引用位置,增加一項:在Ril_event.h下增加一個Ril_event.cpp(hardware/ril/libril/Ril_event.cpp)
18. P434:最後一行:下面這兩行代碼初始化一個FD為的s_wakeupfd_event的任務。此句中的s_wakeupfd_event改成s_fdWakeupRead
19. P445頁:程式碼片段中://SOCKET_NAME_RIL的值為”Ril”,改成值為”rild”。注意全為小寫。
20. P32:讀者在編寫代碼時務小心對待,改成務必
21. P50:zygote是通過fork和execv共同建立的,改成execve
22. P90 Watch Dog的中文意思是看門狗。這裡多了兩個空格。緊接的---》後面的“程式經常 跑飛 (比如說電磁幹擾等),----也多空格。
23. P73:程式碼片段:
else if (index == 0) 前面增加 ......省略符號
24 P448:代碼中的:AT命令由它發送給Rild,改成Ril命令由它發送給Rild。
25. P455:封裝了Rild對AT指令的處理函數:改成封裝了Rild對Ril命令的處理函數。