2010年2月4日 星期四

Big endian, Little endian

big endian 與 little endian 指的是位元組在記憶體裡面的排列順序(詳細定義更複雜,這裡為方便起見以此為例)
  • big endian:較高的位元組在位址的較後位置,舉例來說
    long a = 0x12345678,這樣子的資料在記憶體裡面的排列順序為 0x12 0x34 0x56 0x78
    參考wiki的圖如下

    File:Big-Endian.svg

  • little endian:較高的位元組在位址的較前位置,繼續前面的例子
    long a = 0x12345678,這樣子的資料在記憶體裡面的排列順序為 0x78 0x56 0x34 0x12
    參考wiki的圖如下

    File:Little-Endian.svg

2010年2月3日 星期三

程式設計上的兩種Stub

  1. 不包含任何邏輯,純粹只是一個空的function,這種function叫做stub function

    public void int sum(int a, int b) {
        //do not calculate but return a constant number
        return 0;
    }

  2. 在分散式系統中,處理的function在remote端,而在local端設計一個function,接收local端的參數,然後再送交remote端處理。

    public void int sum(int a, int b) {
        //call remote function
        mWebRMI.sum(a, b);
    }

     
依照wiki的定義:

A stub in distributed computing is a piece of code used for converting parameters passed during a Remote Procedure Call (RPC).

2010年1月28日 星期四

Handler, Message, MessageQueue, Looper and Thread

  1. Handler是用來處理Message,在Message裡面的what欄位可以說明Message的種類,當Message送到Handler後,Handler會看這個Message的what欄位,再用相對應的邏輯處理。
  2. MessageQueue是一個FIFO的資料結構,可以把Message暫放在裡面等待被處理。
  3. Looper是一個用來將MessageQueue裡面的Message逐一送到Handler的類別。
  4. 由於Looper會佔住Main Thread的執行,所以通常會產生一個外部的Thread來幫忙執行。每一個Thread都有自己的Looper以及MessageQueue,可以在Thread中利用getLooper()來取得looper物件,然後再用Looper.myQueue()取得該Thread的MessageQueue來使用。