星期五, 10月 30, 2015

Bitmap的壓縮

Bitmap在Activity間傳送時,進行壓縮。

ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();

星期四, 10月 01, 2015

利用指令將本地端專案加入GitHub

利用指令將本地端專案加入GitHub

1.在本地專案目錄下,開啟Git Bash,輸入git init指令,建立此專案的本地端數據庫。

2.建立完本地數據庫後,輸入git add .指令,將所有修改過的或新增的檔案add到stage狀態。

3.輸入git commit -m 'first commit'指令,commit所有已經stage的檔案。

4.輸入git remote add origin remote repository url指令,提示本地端數據庫將會被push的位置。

5.輸入git push origin master指令,將專案push到GitHub。

星期五, 9月 25, 2015

在OneDrive雲端空間建立Git遠端數據庫

在OneDrive雲端空間建立Git遠端數據庫


1.在OneDrive目錄下新增新資料夾,命名為TestGit

2.進到TestGit點擊右鍵,開啟Git Bash

3.在Git Bash中輸入命令,git init --bare

4.執行指令後,TestGit內會建立一些資料如hook、info、object等(建立遠端數據庫)

5.在除了OneDrive目錄以外的目錄下點擊右鍵,開啟Git Bash

6.在Git Bash中輸入指令,git clone file///c/Users/user/OneDrive/TestGit

7.執行指令後,建立TestGit目錄(建立本地端數據庫)

8.完成以上步驟就可以進行push、pull等等將專案資料進行版本管理



除了OneDrive也可以選擇其他雲端空間如GoogleDrive、Dropbox,將遠端數據庫建立在雲端空間。


建立TestGit目錄(本地端數據庫)後,就可以將專案建立在TestGit目錄下,利用git完成版本控制。

星期日, 5月 24, 2015

Android Interface Definition Language (AIDL) (一)

Android Interface Definition Language (AIDL)


行程間通訊(IPC,Inter-Process Communication),指至少兩個行程或執行緒間傳送資料或訊號的一些技術和方法。在Android系統中提供一些方法進行IPC,AIDL為其中一種方法。

AIDL (android interface definition language) 與其他你可能已經使用過的IDLs相似,它允許你在client和service兩者上編寫介面(interface)用來在彼此之間進行行程間通訊。在Android上,一個行程按理是無法存取其他行程的記憶體,所以說,它們需要將它們的物件分解為作業系統可以理解的原始狀態,封送(marshell)物件跨過邊界。編寫進行封送的程式是乏味的,所以Android利用AIDL處理好了。

注意,只有在如果你允許來自其他應用程式的用戶端存取你的服務(service)及想在你的服務(service)中處理多執行緒,使用AIDL是必須的。如果你不需要在跨不同應用程式間實現並行IPC,你應該藉由實現一個Binder建立你的介面(interface),或者你想進行IPC,但不需要處理多執行緒,利用一個Messager實現你的介面(interface)。無論如何,在你實現AIDL前確保你理解bound service了。

在你開始設計你的AIDL介面(interface)前,注意調用AIDL介面(interface)是函式直接調用,你不應該做出假設在執行緒中調用函式的可能。發生情況不同依據是否來自在本地行程或遠端行程中的一個執行緒的調用。特別是
  • 執行在相同執行緒中的本地行程產生的調用正在調用,如果此執行緒是你的主要使用者介面執行緒(UI thread),此執行緒繼續在AIDL介面中執行。如果此執行緒是其他執行緒,是在你的服務(service)中執行你的程式的其中之一執行緒。因此,如果只有本地的執行緒正在存取服務(service),你可以完全地控制在服務中執行的執行緒(但是,如果是這樣的話,你不應該使用AIDL,但應該實現一個Binder來建立介面來取代之)。
  • 來自遠端行程的調用被一個執行緒池(thread pool)調度,該平台在你自己的行程中維護,你必須為來自未知執行緒的調用作準備,可能在同一時間許多調用發生,換句話說,AIDL的實現必須是完全地執行緒安全(thread-safe)。
  • oneway關鍵字改變遠端調用的行為。當使用時,遠端調用不會阻塞,它會簡易地送交易資料並立即回傳,介面的實現終究會接收它如來自Binder執行緒池正規的遠端調用。如果oneway備用在本地調用,不會有任何影響且調用仍是同步的。