2009年8月14日 星期五

Some notes about writing the Android application widgets

研讀完Forecast widget by Jeff Sharkey 的code後,整理關於寫Android application widgets的一些注意事項:

1. 一個full widget application會有:
(a) 一個update service
(b) 一個content provider
(c)一個Configure Activity
(d)一個Info Activity
(e)多個 widgets (receiver)
(f) UI resource (Class R, 以據UI layout 與 UI resource 的描述檔(XML format)所產生)

2. update service 所負責的工作:
(a) 依據widget 使用者用Configure Activity所設定的user configuration (ex: country code and degree unit)向所bound的service (ex: The forecast widget is bound to the National Weather Service(http://www.nws.noaa.gov/xml/))查詢資料是否更新
(b) fork 一個thread 執行以上的查詢動作,因為update service 須處理多個widget的查詢動作
(c) 設定一個alarm以做定期查詢動作
(d) 查詢一旦知道資料更新,用data parser (XmlPullParser for XML format data)去parse由service side所取回的資料,再normalize這些資料,存到content provider的backend database (SQLite)
(e)此時再依據更新過後的資料update widget的UI

3. content provider所負責的工作:
(a) 宣告存取backend database (SQLite)的CONTENT URI,例如:
content://org.jsharkey.sky/appwidgets
"org.jsharkey.sky"用來identify content provider,在widget application的AndroidManifest.xml中會有一段宣告content provider:


CONTENT URI再最後會append上widget的id,依據此id可以對widget在database的data records做一些操作動作(Query, Insert, Update, delete):
content://org.jsharkey.sky/appwidgets/50
(b) content provider 會實作下面幾methods:
onCreate() 透過SQLiteOpenHelper建立資料庫與資料表格,該method當provider is being started會被call,所以widget application會有一個SQLite資料庫
query()資料庫資料查詢動作
insert()資料庫資料新增動作
update()資料庫資料更新動作
delete() 資料庫資料刪除動作

4.Configure Activity所負責的工作:
(a) 當application launch widget時,pop一個UI讓使用者做configuration
(b) 透過content provider將configuration data寫入到backend database

5.Info Activity主要所負責的工作是當widget application安裝完畢後會pop一個UI,一般這一個UI顯示 該widget application的說明

6. widget所負責的工作:
(a)向update service註冊,當資料有update時update service更新widget 的UI
(b)啟動update service,由update service幫widget檢查data是否更新,而不是由widget本身去做這樣即可以避免widget遇到Application Not Responding (ANR)timeout


reference:
http://jsharkey.org/blog/2009/04/24/forecast-widget-for-android-15-with-source/
http://developer.android.com/intl/zh-TW/guide/practices/design/responsiveness.html

1 則留言:

匿名 提到...

Howdy, There's no doubt that your blog may be having internet browser compatibility problems. When I take a look at your web site in Safari, it looks fine however, when opening in I.E., it's got some overlapping issues.
I merely wanted to give you a quick heads up! Aside from that, excellent site!
Also see my page :: bacalao