標籤:android blog http java 使用 os io strong
春節期間,相對比較閑,上班時也沒什麼事情做。利用這一周的時間,簡單的學習了一下移動方面的開發。主要是針對android,其實我對IOS更感興趣 (因為我用iphone),苦於暫時沒有蘋果電腦,只能把它放到以後學習。我的工作中暫時沒有用到移動方面的開發,自己以前也一直做.net方面的應用。在這裡以一個.net開發人員的思維記一下對android開發學習中的一點自己的心得和體會。初學者的胡言亂語,高手請一笑而過。
- 開發環境搭建
先下載JDK安裝。對於android的SDK和eclipse,可以直接到android的網站(http://developer.android.com/sdk/index.html#download )上下載,它已經把eclipse封裝好了,下載來可以直接使用,不需要配置android SDK。
對於模擬器,我推薦一個叫BlueStack的,很好很強大,比eclipse上帶的AVD的速度快多了。唯一的缺點就是屏很大,好像不能調整屏的尺寸。
2. android項目結構
對於整個android項目,一般我們需要關注的是常用的兩個目錄和一個檔案。
- src目錄,所有的java代碼都在這個目錄下。
- res目錄,所有的資源檔都在這個目錄下。
- AndroidManifest.xml檔案,系統的配置資訊,很重要的一個檔案。系統中一些功能和頁面的授權都要在這裡定義。有時一些功能或頁面不能成功調用,可以首先去檢查一下是否在該檔案中授權了。
3. Activity
android中最基本的任務對象,我把它簡單的理解成.net開發的表單或頁面。一個Activity上可以有多個view,所有的控制項(widget)都是從view中繼承來的。Activity的布局有兩種方面,一種是用layout檔案來實現,代碼中用setContentView載入相應layout檔案,相當於一個畫好控制項的form;而另一種是動態用代碼實現布局,好比.net中的動態產生的頁面。
4. Intent
兩個activity間的通訊就通過intent了。我把它理解成類似asp.net中的request + response對象。Intent中可以傳遞一個或多個資料,多個資料的傳遞一般打包成一個Bundle。Intent用putExtras方法載入傳遞的資訊。而子表單可以用getIntent得到傳過來的intent。
- 用startActivity(intent)直接開啟一個不需傳回值的子表單。
- 用startActivityForResult開啟一個要傳回值的子表單。子表單中用setResult(RESULT_OK, intent)設定傳回值,父表單需要重載onActivityResult方法 得到返回資訊。
- 利用intent可以調用系統功能,比如郵件,簡訊,電話,連絡人等等。調用系統功能或表單需要Url,比如下面是電話功能。
Uri uri = Uri.parse("tel:13800138000"); Intent it = new Intent(Intent.ACTION_DIAL, uri); startActivity(it); |
5. 資源檔(resource)
Android中的資源檔很強大,圖片,描述文本,頁面配置,風格等都可以放到資源檔中。在程式中用R對象可以取到各資源對應的id,這個id是系統自動產生的一個常量,你可以在gen目錄下的R.java下找到相應的定義。在程式中用getResources()加R對象可以取得相應的資源。
6. GridView和ListView的使用
程式離不開資料,而一般多資料介面離不開Grid或List。Android中的這兩種控制項也跟.net的DataGrid和DataList類似,需要給他們一個資料來源,但它們的資料來源就比DataSource要複雜得多,它們的資料來源是一個Adapter。通常,我們需要重寫一個基於BaseAdapter的子類。GridView的項很類似.net中DataGrid的模板列,子項上可以加很多的控制項。這些控制項的定義的和資料繫結需要在Adapter中的getView方法中實現。
- 寫一個Adapter類,Adapter所需要的資料,通常我們是用一個ArrayList傳給它。而在這個類中,最主要的就是重寫getView方法。每個GridView和ListView的項的表現方式就在這個方法中定義的。在這個方法裡,你可以為每個項加控制項,或者控制項所對應的事件。
- 資料繫結。把資料來源(通常為ArrayList)傳給一個Adapter,GridView或ListView用setAdapter去綁定這個Adapter。
- 資料項目發生了變動,用Adapter的notifyDataSetChanged方法去重新整理控制項。
7. SQLite
SQLite我只是簡單的使用,感覺它的文法是用標準的SQL文法,但我只發現它的table功能,沒有發現有類似視圖和預存程序的功能。由於資料是存在你的手機上某個地方,不像SQL server等資料,我們沒法事先建立一個資料庫。所以通常的做法是寫一個自己的DBOpenHelper,它是SQLiteOpenHelper的一個子類,我們需要重寫它的onCreate和onUpgrade方法。以便第一次使用時建立自己的資料表。(在onCreate中用CREATE TABLE IF NOT EXISTS TABLE語句)。
(註:剛看到一網友的回複,SQLite 可以事先建立一個資料庫,方式有點特別,很不錯。它是事先準備好一個資料庫檔案,然後第一次運行時copy到相應的SQLite資料庫所在目錄。可以參考以下文章。其實同樣的道理,我想開始可以準備一個XML或文字檔,程式第一次運行時把XML檔案中的內容insert到建立的表中,這樣是否更方便呢?更不用關心SQLite檔案是放在哪個目錄下的。)
http://www.akasuna.com/2012/03/09/embed-sqlite-database-in-the-apk-of-android-distributed-application/)
8. TabHost使用
Android中的tab控制項很不好用。我想寫一個底部多個選項,點不同選項開啟不同頁面的功能,很不好實現。好不容易用TabHost實現了,發現一個很大的問題就是,開啟的tab頁面,再跳轉到另一個子頁面去,底下的tab就全都不見。最後查了很多資料,說用GroupView或Fragment可以解決,Fragment我還沒有學到,參考了網上一篇文章,用GroupView實現了
http://hkp.iteye.com/blog/1185482
9. PhoneGap
很強大的一個東西,號稱是多平台開發架構。我用它來寫了幾個簡單的頁面,非常好實現。可以做到真正以html5 + javascript寫android程式,它可以用javascript調用android API,比如調用連絡人資料,電話,簡訊,網路攝影機,SQLite資料庫等。特別是加上jQuery mobile,寫一些基於網路資料的程式,非常簡單,頁面也很漂亮。但用它寫的頁面,我在模擬器上試了,好象有將近一秒鐘的延遲,速度還是比原生程式差很多。
10. 網路資料的非同步擷取和檔案的讀寫
正在學習中…
評論列表 回複引用#1樓 2013-02-19 17:11 walkline 用PhoneGap開發的web app 速度慢支援(0)反對(0) 回複引用#2樓 2013-02-19 17:13 IT小崽 不錯。。很強大!我還沒去弄Android呢。前些日子弄了下Window Phone的開發支援(0)反對(0) 回複引用#3樓 2013-02-20 08:20 李小超 你錯了,SQLite 可以事先建立一個資料庫
http://www.akasuna.com/2012/03/09/embed-sqlite-database-in-the-apk-of-android-distributed-application/支援(0)反對(0) 回複引用#4樓[樓主] 2013-02-20 08:30 飛不動 @李小超
引用你錯了,SQLite 可以事先建立一個資料庫
http://www.akasuna.com/2012/03/09/embed-sqlite-database-in-the-apk-of-android-distributed-application/
學習了,很不錯的資料。謝謝!支援(0)反對(0) 回複引用#5樓 2013-02-20 08:47 李小超 SQLite檔案所放的目錄名,其實就是 【/data/data/{app包名}/databases/】,是固定死的,明顯預先準備好包含資料的資料庫方便啊。
如果資料較多,幾萬條資料甚至更多,你那種方法插入資料時候估計太耗時了