.net開發者對android開發一周的學習體會


       春節期間,相對比較閑,上班時也沒什么事情做。利用這一周的時間,簡單的學習了一下移動方面的開發。主要是針對android,其實我對IOS更感興趣 (因為我用iphone),苦於暫時沒有蘋果電腦,只能把它放到以后學習。我的工作中暫時沒有用到移動方面的開發,自己以前也一直做.net方面的應用。在這里以一個.net開發人員的思維記一下對android開發學習中的一點自己的心得和體會。初學者的胡言亂語,高手請一笑而過。

  1. 開發環境搭建

  先下載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. 網絡數據的異步獲取和文件的讀寫

  正在學習中…


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM