2013年12月24日 星期二

[Telecom]Standard Reference

Detail: http://samiramberkar-tutorials.blogspot.tw/2010/03/standard-reference.html
UMTS (Rel 5)
23.002Network architecture
23.107QoS architecture
23.205Bearer Independent CS Core Network
23.228IMS
23.205SS7 over IP or ATM
25.301Radio interface layer
25.302Phy layer services
24.007/8NAS protocols
25.401UTRAN description
25.410UTRAN Iu interface
22.105UMTS services/capabilities
25.420Iur interface
25.430Iub interface
25.321MAC
25.322RLC
25.323PDCP
25.324BMC
25.331RRC
25.211Phy channels and their mapping on transport channels (FDD)
25.214Phy procedures (FDD)
25.221Phy channels and their mapping on transport channels (TDD)
25.224Phy procedures (TDD)
31.102USIM (also check out ETSI TS 102 221)
31.111USAT (also check out ETSI TS 102 223)
25.213Phy - Spreading and Modulation (FDD)
25.223Phy - Spreading and Modulation (TDD)
25.304UE idle mode procedures and cell re-selection procedures in connected mode
25.212Multiplexing and Channel coding (FDD)
25.222Multiplexing and Channel coding (TDD)
25.101UE radio transmission and reception (FDD)
25.102UE radio transmission and reception (TDD)
26.071AMR speech codec general description
25.215Phy measurements (FDD)
25.225Phy measurements (TDD)
25.308HSDPA overall description

2013年12月23日 星期一

[Android]Application、Activity Stack 和 Task

1. 什麼是Android Application?
Android Application就是一個android應用程序。 簡單的理解就是一個apk就是一個Android Application。例如Android平台下自帶的應用程序:Browser、Contacts、camera等。
每一個Application都是由Activity、Service、content Provider和Broadcast Receiver等Android的基本組件所組成,其中Activity是實現應用程序的主體,它承擔了大量的顯示和交互工作,甚至可以理解為一個界面就是一個Activity。
2. 什麼是Activity Stack?
如上所訴,Activity承擔了大量的顯示和交互工作,從某種角度上將,我們看見的應用程序就是許多個Activity的組合。為了讓這許多Activity協同工作而不至於產生混亂,Android平台設計了一種堆棧機制用於管理Activity,其遵循先進後出的原則,系統總是顯示位於棧頂的Activity,從邏輯上將,位於棧頂的Activity也就是最後打開的Activity,這也是符合邏輯的。
在操作應用程序時,每次啟動新的Activity,都會將此壓入Activity Stack,當用戶執行返回操作時,移除Activity Stack頂上的Activity,這樣就實現了返回上一個Activty的功能。直到用戶一直返回到Home Screen,這時候可以理解為移除了Activity Stack所有的Activity,這個Activity Stack不再存在,應用程序也結束了運行。
3. 什麼是Task?
Task是指將相關的Activity組合到一起,以Activity Stack的方式進行管理。從用戶體驗上講,一個“應用程序”就是一個Task,但是從根本上講,一個Task是可以有一個或多個Android Application組成的。例如:你想在發送短信時,拍一張照並作為彩信發出去,這時你首先停留在短信應用程序的的Acitivity上,然後跳轉到Camera應用程序的Activity上,當完成拍照功能後,再返回到短信應用程序的Activity。這實際上是兩個Android Application協同合作後完成的工作,但為了更好的用戶體驗,Android平台加入了Task這麼一種機制,讓用戶沒有感覺到應用的中斷,讓用戶感覺在一“應用程序”里就完成了想完成的工作。

[Android] KitKat 4.4 version 功能

  1. Android 4.4 KitKat 最低可支援到 512MB RAM ( 主記憶體 ) 的 Android 硬體設備。
  1. Android 4.4 KitKat 為 Android SDK 新推出應用程式之主記憶體用量分析工具 Procstats 以及附於實機上的主記憶體用量分析之使用選項。
  1. Android 4.4 KitKat 可支援安全性較高的 Host Card Emulation ( HCE ) 模式之 NFC 資料傳輸
  1. Android 4.4 KitKat 讓使用者可透過 Wi-Fi 或者雲端列印 ( 如 Google 雲端列印 ) 方式進行列印工作。
  1. Android 4.4 KitKat 提供新的 Printing API 讓開發者可以更方便地將各類文件檔案轉換成 PDF 文件格式並進行列印工作。
  1. Android 4.4 KitKat 讓印表機製造商也可以使用新的 API 去開發自己的列印服務。
  1. Android 4.4 KitKat 提供新的文件檔案存取架構 ( Storage Access Framework ) ,讓開發者可以更便利地開發出具有建立、編輯、儲存與刪除文件檔案之功能。
  1. Android 4.4 KitKat 支援低功耗的感應器 ( Low-power Sensors ) 。
  1. Android 4.4 KitKat 支援具步測器 ( Step Detector ) 與計步器 ( Step Counter ) 功能之感應器。
  1. Android 4.4 KitKat 推出新的螢幕畫面錄製工具 ( Screen Recording Utility ) ,讓開發者可以更便利地錄製自己所開發的 Android 手機應用程式之教學影片。
  1. Android 4.4 KitKat 推出可依實際螢幕解晰度去自動切換影片畫質的影片播放模式 ( Adaptive Playback ) 。
  1. Android 4.4 KitKat 支援加密的 Common Encryption ( CENC ) for MPEG-DASH。
  1. Android 4.4 KitKat 支援 HTTP 即時串流媒體播放 ( HTTP Live Streaming ( HLS ) ) 。
  1. Android 4.4 KitKat 支援低功耗的 Audio Tunneling to DSP。
  1. Android 4.4 KitKat 支援音頻訊號監測功能 ( Audio Monitoring ) 。
  1. Android 4.4 KitKat 推出新的音量增強功能 ( Loudness Enhancer ) 。
  1. Android 4.4 KitKat 支援讓音頻可輸出其時間戳記資料 ( Audio Timestamps ) ,以便改善影音同步 ( AV sync ) 之效果。
  1. Android 4.4 KitKat 支援 Wi-Fi CERTIFIED Miracast™ ,讓 Android 行動裝置之畫面可以無線傳輸至具相對應設備的顯示器中顯示。
  1. Android 4.4 KitKat 持續改善 RenderScript 的執行效能。
  1. Android 4.4 KitKat 支援 GPU 加速 ( GPU Acceleration ) 。
  1. Android 4.4 KitKat 的 Android NDK 支援 RenderScript 。
  1. Android 4.4 KitKat 支援 GLES2.0 SurfaceFlinger ,以便提高圖像顯示效能,並支援更佳的色彩校正與圖像特效之開發功能。
  1. Android 4.4 KitKat 推出新版本的 Android Hardware Composer 。
  1. Android 4.4 KitKat 支援兩個新的藍芽無線傳輸技術規範 ( Bluetooth Profiles ) ,包括 Bluetooth HID over GATT ( HOGP ) 與 Bluetooth MAP ( Message Access Profile ) 。
  1. Android 4.4 KitKat 支援紅外線發射器 ( IR Blasters ) 之功能開發。
  1. Android 4.4 KitKat 支援 Wi-Fi TDLS 。
  1. Android 4.4 KitKat 推出新的簡訊管理單元 ( SMS provider ) 。
  1. Android 4.4 KitKat 推出讓開發者可隱藏全部系統使用者介面 ( 包括隱藏狀態列與導覽列 ) 的 Android 手機應用程式全螢幕顯示模式 ( Full-screen Immersive Mode ) 。
  1. Android 4.4 KitKat 推出新的轉場動畫架構讓開發者可以更便利地為使用者介面加上轉場動畫之效果。
  1. Android 4.4 KitKat 推出半透明的系統視窗之風格與佈景主題 ( Window Styles and Themes ) ,讓開發者可以單獨將在自己開發的 Android 手機應用程式之系統狀態列與導覽列變成半透明模式。
  1. Android 4.4 KitKat 增強存取通知訊息 ( Notification ) 之開發功能。
  1. Android 4.4 KitKat 推出以 Chromium 為基礎的內嵌式網頁元件 ( WebView ) 。
  1. Android 4.4 KitKat 增強無障礙工具 ( Accessibility ) 之 API  功能。
  1. Android 4.4 KitKat 為了強化安全性,將 SELinux 設為強制模式 ( Enforcing Mode ) 。
  1. Android 4.4 KitKat 增加支援兩個安全加密的演算法,包括 Elliptic Curve Digital Signature Algorithm ( ECDSA ) 及 The Scrypt key derivation function 。
          detail: http://developer.android.com/about/versions/kitkat.html


[Android] Version and Nickname mapping

Update: 2013 Feb



[Android]基本名詞解釋

一、關於Root。
1、什麼是「root」?
「Root」權限相當於電腦的管理員權限,「Root」後用戶可以完全權限訪問Linux內核:「Root用戶」可以編輯修改系統內的任何東西。出於安全考慮,「普通用戶」沒有該完全訪問權限。
root你的手機之後,你就可以讀寫未root時你無法訪問的手機內部核心區塊。
當然,是否root完全取決你自己。普通手機用戶不root也可以很好的使用自己的手機。

2、為何要「root」我的手機?
最主要的原因是刷第三方ROM(相當於重裝電腦的操作系統)。另外,有ROOT權限後就可以運行一些需要root的軟件。
Root後,你可以做的事:
a)運行更多的Linux命令(android ADB)和超級用戶權限。
b)可以使用許多需要root權限的軟件(例如,鈦備份,Root Explorer等)。
c)更改某些重要的核心系統設置。比如,關閉官方ROM的安全校驗以使我們可以刷寫第三方固件,或者運行某些有趣的調節程式,比如說超頻,再或者還可以讓我們安裝核心recovery程式。

3、root安全嗎?
是的。如果你膽大心細,按照教程來做,不會發生什麼蛋疼的事。

4、root後會刪除我的個人資料嗎?
不會。root僅僅是改變系統權限而已。

5、root會使我的保修失效嗎?
退一萬步說,你可以unroot你的手機並恢復出廠設置,來假裝什麼事也沒發生過。

6、root過程是可逆的嗎?
是的。只要你願意完全可以unroot你的手機。

二、關於S-OFF和刷機。
1、「S-OFF」是什麼?「S-ON」和「S-OFF」有什麼區別?我為何需要「S-OFF」?
每一部手機缺省狀態下都是「S-ON」。為了獲取完全的寫入權限(例如刷自製固件,裝自製recovery工具),需要轉換為「S-OFF」。
通常手機都是處於「S-ON」(Security ON)狀態,此時手機「/system」和「/recovery」分區無法被讀寫。最直接的表現就是如果用RE管理器等高權限文件管理器刪除「/system」檔夾下的程式,重啟後程式又會出現(這也好多網友說獲得root後還是刪除不了系統自帶軟件的原因);另外無法修改開機第一屏畫面。
S-OFF不同於root:S-OFF可以讓你通過Bootloader裡的Fastboot或者自製recovery(多數人用的都是clockwork)刷寫自製固件。

2、如何「S-OFF」?
目前有兩種S-OFF的方法:
a)通過安裝工程模式的hBoot來S-OFF。即所謂的軟解。
b)通過某些設備,例如白卡來S-OFF。即所謂白卡解鎖。
軟解的手機進入Bootloader後第一行的末尾顯示的是:ENG S-OFF,白卡解的手機則是:SHIP S-OFF。ENG意為engineering即工程模式,SHIP即意為原廠發佈的。

3、如何改回「S-ON」?
因某些原因(送去保修等)想要恢復S-ON的話,需要下載對應你手機版本的官方刷寫程式RUU刷回原廠固件。這樣S-ON就回來了。

4、「RUU」是什麼?
RUU意為ROM Update Utility。是一個PC端的刷機工具。大多數RUU都是官方發佈的,其包含了刷機工具和官方固件,並打包為一個單獨文件。

5、什麼是「ROM」?
ROM意為Read Only Memory,他指手機的不可訪問的只讀的內部存儲單元。他包含了android操作系統和所有原廠預裝應用軟件工具。
通常一個完整的ROM(或者說固件)包含了:一個recovery鏡像,一個boot鏡像(包含了核心(Kernel)和ramdisk),一個系統鏡像(操作系統,或者簡稱「OS」),和一個Radio鏡像。
我們也經常把可刷入手機內存的鏡像統稱為ROM或固件。

6、什麼是「Radio」?我們為何要刷Radio?
一個合適的Radio可以改善我們手機的信號、藍牙、WiFi和GPS。也許也可以提高手機電池的壽命。

7、什麼是「刷機」?
刷機就是把一個新的固件鏡像刷入手機的內存裡。
你可以刷入一個recovery,或是一個boot,或系統,或Radio,或者是包含以上所有東西的完整ROM。

8、我為什麼要刷機?
刷機後:
a)把你的手機更新到最新的官方固件(因為是官方的,所以無需root也無需S-OFF,也不會使保修失效)。
b)把你的手機去除品牌定制化,變成通用的官方固件。
c)刷入了自製固件,其:包含/去除HTC sense,其他android版本,等等。
d)安裝了更好用的recovery工具,比如clockwork。
e)更合適的Radio。

9、刷機會刪除我的個人資料嗎?
如果你僅僅是刷boot或者recovery的話,不會。
但是如果你刷的是系統或者完整的ROM的話,會的。你個人的所有資料都會被清理掉,所以在刷機前請備份個人資料。
在菜市場裡有很多備份軟件。(例如鈦備份)
你也可以備份NANDroid。

10、刷機會使保修失效嗎?
同樣的退一萬步講,如果你備份後原廠固件或是下載了對應你手機版本的固件的話,可以隨時刷回去。
同樣,對於大多數的水貨手機來說,一切保修都是浮雲。

三、關於Bootloader和Recovery。
1、何為「Bootloader」?
Bootloader是一個ROM裡的固件管理工具。使用它可以讓你恢復出廠設置,用Fastboot刷機,加載Recovery工具。
在Bootloader裡你也可以查看S-ON/S-OFF的狀態,固件和Radio的版本等等。
進入Bootloader無需root或S-OFF。在每台出廠的手機裡都有。

2、如何進入Bootloader?
關機,然後按住音量-和電源鍵。(需要把「快速開機」關閉,在「設置」》「應用程式」裡改。或者拔掉電池,讓手機真正的關機。)
你可以直接拔電池來退出Bootloader。
如果你裝了自製recovery的話,可以進入recovery,然後重啟手機。

3、如何備份我的當前ROM(固件)?
在自製recovery裡備份。

4、自製recovery是什麼?
自製recovery(比如clockwork)是一個增強的recovery版本,其替換了固件裡原來的recovery。
自製recovery比原廠的recovery要好,因為他可以讓你可以安全的刷寫未簽名的自製ROM,也可以備份你手機內存裡的整個固件鏡像(NANDroid備份)。

5、如何安裝ClokworkMod(CWM)Recovery?
你必須先root和S-OFF。然後用「ROM Manager」安裝,或者單獨下載clockwork recovery在ADB環境下手動刷寫。

6、什麼是NANDroid備份?
一個完整的體統鏡像可以被重新刷回手機。其不僅僅是簡單備份,因為他包含了當前在你手機內存裡的所有內容:Boot、Recovery、系統、數據、緩存,等。他是你手機整個ROM的快照。
執行NANDroid備份的方法:進入clockwork recovery,進到「Backup and Restore」選項中執行。NANDroid備份將會被保存在sd卡ClockworkMod檔夾內。

7、如何加載NANDroid備份?
如果你可以進入clockwork recovery的話,只需簡單的從他的菜單裡加載NANDroid。
如果你的手機變磚從而無法進入clockwork recovery的話,也有最後一個方法:單獨下載clockwork recovery至PC裡,然後打開cmd控制臺,進入存有clockwork recovery的目錄,使用以下ADB命令刷寫:「fastboot flash recovery recovery-clockwork-2.5.1.2-vision.img」。(前提是你的PC上有ADB環境,不過好像這招對白卡解鎖的機器無用)

8、什麼是ADB?
ADB意為Android Debug Bridge。其使用Linux命令對手機發出指令。你可以在MS-DOS環境下直接使用ADB命令,或者進入ADB shell使用Linux命令。通過ADB,你可以安裝軟件,卸載軟件,刷寫鏡像,改變手機設置等。

2013年12月20日 星期五

[JAVA] Program,Progress,Thread

  • Program:
    一群程式碼的集合,用以解決特定的問題。在物件導向中相當於類別(Class)。
  • Process:
    由Program所產生的執行個體,一個Program可以同時執行多次產生多個Process。在物件導向中相當於Object。
而 Process又由 Memory Space 和一個以上的 Thread 所組成,其中:

  • Memory Space:相當於Object的variable,不同Process的Memory Space也不同,彼此看不到其他Process的Memory Space。
  • 一個以上的Thread:
    Thread代表從某個起始點開始(例如main),到目前為止所有函數的呼叫路徑,以及這些呼叫路徑上所用到的區域變數。
當然程式的執行狀態,除了紀錄在主記憶體外,CPU內部的暫存器(如Program Counter, Stack Pointer, Program Status Word等)也需要一起紀錄。所以Thread又由下面兩項組成:

  • Stack:紀錄函數呼叫路徑,以及這些函數所用到的區域變數。
  • 目前CPU的狀態。
因此 Thread 的重點如下,一個Process可以有多個Thread。同一Process內的Thread使用相同的Memory Space,但這些Thread各自擁有其Stack。換句話說,Thread能透過reference存取到相同的Object,但是local variable卻是各自獨立的。作業系統會根據Thread的優先權以及已經用掉的CPU時間在不同的Thread作切換,以讓各個Thread都有機會執行。

總之Thread 執行緒常被定義為一個輕量的(Lightweight) Process,可用來處理 request,
然而雖然是輕量,但在產生 Thread 時仍會有 overhead,此時若 request 量太大,
又沒有善加管理這些 Thread 的話,就會拖累整體系統的效能。
為了解決這種類型的效能問題,所以就有了 Thread Pool 的概念產生。

Thread Pool 的概念如同其名,就是一個 Thread 的 Pool,
其中有固定或變動量的 Thread,當 request 進來時,若有閒置的 Thread 就執行,
若沒有的話,可能產生新的 Thread 或把 request 放入 queue 中等待被執行,
當一條 Thread 執行完工作而 queue 中仍有 request 在等待時,
此 Thread 應該要被分發新的 request 並處理。

由以上幾行,我們可以看出 Thread Pool 的工作有:

  1. 管控 Thread 的產生與回收
  2. 分發 Thread 處理 request
  3. 處理 request 的 queue 

[JAVA] Synchronized

簡單介紹
Synchronized使用時,需指定一個物件,系統會Lock此物件,當程式進入Synchrnoized區塊或Method時,該物件會被Lock,直到離開Synchronized時才會被釋放。在Lock期間,鎖定同一物件的其他Synchronized區塊,會因為無法取得物件的Lock而等待。待物件Release Lock後,其他的Synchronized區塊會有一個取得該物件的Lock而可以執行。


各種用法
1. Synchronized Method
synchronized public void syncMethod() {

}

此種synchronized用法鎖定的物件為Method所屬的物件,只要物件被new出超過一個以上的Instance,就有可能保護不到Method內程式。但如果此物件只會被new出一個Instance,譬如new出來後就放到ServletContext,要用的時候從ServletContext中拿出來執行,就可以避免此情況。
2. Synchronized Static Method
synchronized static public void syncMethod() {

}

此種synchronized用法鎖定的物件為Method所屬的物件的Class,不管被new出幾個的Instance,都能夠保證同一個時間只會有一個Thread在執行此Method。
3. Synchronized(this)
public void syncMethod() {
  synchronized(this) {
    …
  }
}

此種synchronized用法與synchronized method用法一樣,都是鎖定Method所屬的物件本身。
4. Synchronized(SomeObject)
public void syncMethod() {
  synchronized(SomeObject) {
    …
  }
}

此種synchronized用法鎖定的是SomeObject,如果SomeObject是同一個Class的兩個不同Instance,那synchronized區塊內就有可能被同時執行。如果每一個Synchronized的SomeObject都是同一個Instance(或者SomeObject本身就是Static),就可以保證區塊內同時間只會有一個Thread執行。
當使用Synchornized(SomeObject)時,SomeObject本身處於被Lock狀態,但此時其他的Thread是可以去更改SomeObject裡面的值,Lock只是同步化的狀態,不表示不能更改資料。


使用時機
Synchronized的使用時機很難定義,比較常見的情況是,當程式中會取出某一個共用的物件且會判斷物件內容值,再更新物件內容,此情況大部分都需要synchronized保護。  

2013年12月19日 星期四

2013年12月16日 星期一

[JAVA] container (轉)

在程式運作中,有時候會需要有地方可以暫時儲存產生出來的物件,我們稱之為 Container(容器)。

而根據目的的不同,在 container 的選擇上也有所不同,例如:

  • List:循序索引的串列結構
  • Set:不允許相同物件存在的集合結構
  • Map:使用 Key-Value(鍵-值) 方式儲存的結構
Collection

在 Java SE 中,Collection 包含了 List 以及 Set。

首先先認識一下 List ,其為 java.util.Collection interface 的 sub interface,而 Collection interface 則是擴充了 Iterable interface,因此其關係如下:

Iterable --> Colllection --> List
而在 J2 SE 5.0 之後,由於增加了 Generic 的功能,因此許多這一類的 Class 都使用 Generic 的功能重新改寫了,因此在查詢 API 時常常會發現 Generic 的使用。

而 List 的特性在於:每個 List 中的元素都是循序加入的,並可透過 index 來存取元素。

然而,List 可使用 Array(java.util.ArrayList) 或是 Linked List(java.util.LinkedList) 來進行實作。而每一種不同的資料結構,適用的情況也不同:

  • ArrayList:處理循序加入以及存取元素方面,效率較佳
  • Linked List:處理經常變動元素排列順序時,效率較佳
接著以下針對由 List 所衍生出來的 container 進行說明:

ArrayList
使用 Array 結構實作 List,而其特性為 index 的應用,因此對於快速取得隨機 object 上效率叫好,但在新增或刪除 object 上,速度就會比 Linked List 慢上許多。

2013年12月15日 星期日

[JAVA] inner class 解析 (轉)

InnerClass 是在JAVA中常見的使用方法
顧名思義,就是有個Class包在另一個Class裡面
如果才接觸JAVA或者對物件導向程式設計並沒有很熟的人,知道這樣就夠了,因為在摸透整個物件設計理念之前,嘗試了解InnerClass 並不是一件聰明的選擇,只會讓人更加頭昏眼花而已@_@ (技能無法使用,需求:物件導向程式設計等級2)
但是如果對JAVA已經有點小熟,你一定已經用過InnerClass ,只是對其使用觀念還有些模糊,這樣的話你就已經解鎖了這項技能,如果你手上還有技能點,請大方地獻給InnerClass 吧!( ̄▽ ̄
難度不高,但是需要一些背景知識
在學習InnerClass 之前,先來了解一下專有名詞吧
1.Member <=>Static Member
=====================
Member: 直屬Class底下的都可稱為Member 
Member 變數稱: instance field
Member Method稱: instance Method
Member Class 就是Member Class
=====================
Static Member變數稱: class field
Static Member Method稱: class Method
Static Member Class 就是Static Member Class
=====================
總之,冠上Static 的東西,就是class 等級的,不需要實體化就可以使用
非Static 的東西就必須要成為instance 才可以使用


2.區域名詞

class ExampleClass{
//field area
//全域

void method(){
//local area
//區域

}
}
這樣一來,InnerClass 會用到的名詞大概都介紹了
名詞介紹可以先不用看得太仔細,寫名詞介紹主要只是為了等一下看InnerClass 時可能會有理解上的困難,或是翻譯上的誤差,用來對照用的╮( ̄▽ ̄)╭

進入正題了…
JAVA中的Class分成2種類
1.一般Class
2.InnerClass (內部類別)
(JAVA沒有像C++的巢狀類別
現在我們要介紹的就是InnerClass

其中InnerClass又有3種狀態,依所存在的位置而決定
中文翻譯使用位置英文原文範例
1.成員式在class中Member inner classclass ExampleClass{
class InnerClass(){
//這就是成員式
//

}
}
2.區域式在method中Local inner class (Local Classes)class ExampleClass{
void method(){
class InnerClass(){
//這就是區域式
//
}
}
}
3.匿名式在宣告同時Anonymous inner class(AIC)class ExampleClass{
void method(){
addActionListener(new ActionListener(){
//這就是匿名式
//
});
}
}

其實下面的才是重點…
這3種InnerClass 可以使用變數的權限,以及被使用的方式(不說方法,怕混淆XD)

innerClass的使用變數權限:
成員式Member inner class
所有field/method均可自由使用

區域式Local inner class
所有field/method均可自由使用
Local variables 必須標記為final才可以使用 ㊟1
 如果Local和Field有同名變數時,預設會選用距離inner class最近的階層,也就是Local的變數
 如果想要使用Field變數,就需要使用到.this.來選用該field

匿名式Anonymous inner class
與Local inner class一樣
其實Anonymous inner class與Local inner class的性質是一樣的


從外部使用innerClass的方法:
使用成員式Member inner class的方法
一般Member Classes: new <ClassName>().new <InnerClassName>();
意思就是必須先取得的實體,再用其new來取得實體
Static Classes: new <ClassName>.<StaticInnerClassName>();
由於Static類別隨時可以取得,因此直接指名取得實體即可

使用區域式Local inner class的方法
無直接取用方法,僅可能透過所屬method回傳,限制也很多,用途也不大,幾乎不這樣使用

㊟1: 為什麼必須標記為final才可以使用?
這個說法我看過2個版本,不過後來經過查證,其中有個說法是錯的…真相只有一個!…咳咳
先說一下錯的版本好了,在JAVA全方位學習這本書中有提到關於這個問題的解釋:因為全域變數會自動給定初始值,而區域變數不會,而編譯器為了避免錯誤出現,限制使用者在區域變數上標記final,來確保變數有值(標上final的變數必須給定值)。雖然聽起來很合理,不過卻不是這個原因 ( ̄︶ ̄)>
正確的版本出現在caterpillar大大的網站中,後來去JAVA英文網站查詢後驗證無誤,解釋應該是這樣的:
Local inner class所在的Method回傳值(return)後,Method中的變數將會被銷毀,因此在Method中,被Local inner class所用到的變數會被複製一份來使用,此時,如果該變數不是final,則複製的變數就可能因為更改而不同步,造成錯亂,因此Local inner class所用到的local variables必須標記為final。
另外,匿名式Anonymous inner class所用到的local variables也必須須標記為final,雖然規定都一樣,但是原因並不同。這裡是因為AIC在實體化時,會將使用到的local variables直接複製並且生成為自己的private變數,同樣的,出現拷貝時,就會有同步的問題,因此該變數也必須被標記為final。

2013年12月13日 星期五

[WCDMA]SDU PDU 解釋

SDUservice Data Unit:服務數據單元,又叫業務數據單元,是指定層的用戶服務的數據集,傳送到接收方的時候同一協議層時數據沒有發生變化,即業務部分,然後發給下層之後,下層將其封裝在PDU中發送出去。服務數據單元是從高層協議來的信息單元傳送到低層協議。第N層服務數據單元SDU,和上一層的協議數據單元(PDU)是一一對應的。根據協議數據單元的數據的不同,送到接收端的指定層。
PDU(N) = SDU(N - 1)
SDU(N) = PDU(N + 1)


PDU:協議數據單元N層用戶與N層協議之間傳遞的數據稱為服務數據單元(SDU) N層協議實體之間傳遞的數據稱為協議數據單元(PDU),通過數據發送/接收管理把用戶提交的SDUPDU的形式,通過下層通道發送到對端協議實體。接收端再將PDU還原成SDU送給收端用戶。PDU的封裝/解封裝:在發送方,將用戶遞交的SDU加上協議控制信息PCI,封裝成PDU;在接收方,講接收到的PDU解封裝,去掉PCI,還原成SDU送交接收方用戶。SDU分段/裝配:如果下層通道的帶寬不能滿足傳遞SDU的需要,就需要將一個SDU分成多段,分別封裝成PDU發送出去(分段);在接收方再將這些PDU解封裝後重新裝配成SDUSDU拼接/分離:拼接是指在發送方(n)層協議實體把多個長度較短的(n)SDU封裝成一個(n)PDU來發送,在接收放再將接收到的(n)PDU解封裝,將多個(n)SDU分離出來。採用拼接功能的目的是提高通道的利用率。PDU分割/組合PDU分割是指在發送端(n)層協議實體把一個(n)PDU分割成多個(n-1)SDU,並行地從多個(n-1)通道發送出去;接收端再將收到的多個(n- 1)SDU組合成一個(n)PDU。由於這是一個N層功能,所以組合操作在N層中進行,即N層先得到多個分割開的(n)PDU,然後把它們組合成一個(n)PDU

2013年12月12日 星期四

[JAVA]abstract class v.s. interface

abstract class 和 interface 的區別

abstract class的特徵:
1. abstract class和abstract method都必須用abstract關鍵字來修飾
2. abstract class不能用new關鍵字去產生物件
3. abstract method只需要宣告, 不需要實作
4. 繼承abstract class的子類別必須實作父類別的abstract method, 否則這子類別還是個abstract class

interface的特徵:
1. interface沒有建構方法 (即method中沒有參數, 且沒有任何變數的設定)
     Ex: interface Bus{
                void sound();
           }
2. interface中所有資料成員都必須初始化, 且均為常數
3. 宣告變數必須是final, static和public
4. interface中的method必須為abstact或public


 abstract class 和 interface 的使用時機

何謂abstract class?

提供一種多個class一起合作工作的方式, 將多個class中相同的元素pull up method到public class中, 再以繼承的方式來使用它, 目的是為了實現"多型"精神


何謂interface?

即spec., 完全不需要定義實作, 只需要函式原型
若要實作interface, 就必須follow它的spec. 

[public] [abstract] interface 介面名稱{
    權限設定  傳回型態  method(parameters); 
    權限設定  傳回型態  method(parameters); 

[public] [abstract]是預設, 所以可省略, 因為interface本身就是抽象的


(註)一個介面可以同時繼承多個介面, 即同時繼承了多個介面的abstract method和常數

 => interface A extends 介面1, 介面2, 介面3, ... 

一個class可以同時實作多個interface
 => class B implements 介面1, 介面2, 介面3, ...