October 28th, 2014
前言:
來到第五週,其實作業已經越來越花時間.需要好好把握時間趕快做完才行.
筆記:
- 關於 Broadcast:
- 可以是有順序的(利用setPriority來設定),其中Priority 越高順序越前面.
- 一個broadcast 可以同時被多個broadcast receiver 接收.
- 其中一個Broadcast receiver 可以透過abortBroadcast 來強迫其他receiver來收取broadcast.
- 關於sticky broadcast 比較需要注意的是:
- 接收 sticky broadcast可以收到在註冊前發生的變動.
- 關於 Threads:
- Java的thread 建立之後不會馬上執行.需要跑start()
- 背景的thread無法執行UI的相關動作.(這個地方跟 WinApp 跟 iOS App都一樣)
- 需要執行要跑 runOnUIThread()
- 或是每一個UI物件都有自己的View的post函式.View.post(Runnable action)
- 關於AsyncTask:
- 流程:
- OnPreExecute -> doInBackground() -> publishProgress() -> OnPostExecute()
- 其中如同上圖,有相對應的UI thread method OnProgressUpdate()最後 ObPostExecute() 也可以執行UI的更新.
- 流程:
- 關於Alarm:
- 註冊後,就送機器進入睡眠模式一樣可以收到.(除非關機)
- 要取用Alarm需要使用 getSystemService(Context.ALARM_SERVICE) 來取得.
- Kitkat (API 19) 之後,Alarm的使用變成inexact,也就是說他會盡量把幾個差不多時間的Alarm收集起來一起發送,即時他們時間有些許的差異.透過這個方式來節省電源的使用. (詳細可以參考這段)
- 關於Networking: (Socket, JSON, URLRequest)
- 要做網路溝通使用 HttpURLConnection 而不要使用 AndroidHttpClient 跟 DefaultHttpClient,由於Android team在 Android 2.3之後就不太積極開發.
- JSON的取用方式:
- 要先用ResponseHandler 接回 client的 response 之後再逐一分解.
- data array 可以用 JSONObject.getJSONArray
- 每個mapping key/value 可以使用JSONObject.get(key)
- XML的取用方式:
- 主要有三種存取的方式: (DOM, SAX, PULL)
- 其中記憶體消耗最高的是DOM,因為讀取的時候會把所有的XML樹狀資料全部載入.
- SAX與PULL都是屬於event callback的方式,而PULL提供更多的彈性可以逐一的存取,並且可以控制event的結束.
參考資料:
- 關於broadcast的一些整理
- Broadcast 種類整理:
- 關於Threads Oracle上面的Toturial
- O’reilly 有專門的書籍介紹 Java Threads
- [Android] Android 官方document
- [http://developer.android.com/reference/android/content/Context.html#registerReceiver(android.content.BroadcastReceiver](http://developer.android.com/reference/android/content/Context.html#registerReceiver(android.content.BroadcastReceiver)
- [Android]關於AlarmManager的使用
- 關於 HttpRequest 的挑選與基礎教學
- 關於 Android XML 分析方式的講解(DOM, SAX, pull)