android開發技巧精髓一

1. android單實例運行方法

我們都知道Android平臺沒有任務管理器,而內部App維護者一個Activity history stack來實現窗口顯示和銷毀,對於常規從快捷方式運行來看都是startActivity可能會使用FLAG_ACTIVITY_NEW_TASK標記來打開一個新窗口,比如Launcher,所以考慮單任務的實現方法比較簡單,首先Android123糾正下大傢一種錯誤的方法就是直接在androidmanifest.xml的application節點中加入android:launchMode="singleInstance"這 句,其實這樣將不會起到任何作用,Apps內部維護的歷史棧作用於Activity,我們必須在activity節點中加入android:launchMode="singleInstance" 這句才能保證單實例,當然一般均加在主程序啟動窗口的Activity。

2. px像素如何轉為dip設備獨立像素

最 近有網友問如何將px像素轉為dip獨立設備像素,由於Android的設備分辨率眾多,目前主流的為wvga,而很多老的設備為hvga甚至低端的 qvga,對於兼容性來說使用dip無非是比較方便的,由於他和分辨率無關和屏幕的密度大小有關,所以推薦使用。 px= (int) (dip*density+0.5f) //這裡android開發網提示大傢很多網友獲取density(密度)的方法存在問題,從資源中獲取的是靜態定義的,一般為1.0對於HVGA是正好 的,而對於wvga這樣的應該從WindowsManager中獲取,WVGA為1.5

這裡可以再補充一下dip,sip的知識

3. Android中動態改變ImageView大小

很 多網友可能發現在layout.xml文件中定義瞭ImageView的絕對大小後,無法動態修改以後的大小顯示,其實Android平臺在設計UI控件 時考慮到這個問題,為瞭適應不同的Drawable可以通過在xml的相關ImageView中加入android:scaleType="fitXY" 這行即可,但因為使用瞭縮放可能會造成當前UI有所變形。使用的前提是限制ImageView所在的層,可以使用一個內嵌的方法限制顯示。

4. 如何判斷Android手機當前是否聯網?

如 果擬開發一個網絡應用的程序,首先考慮是否接入網絡,在Android手機中判斷是否聯網可以通過 ConnectivityManager 類的isAvailable()方法判斷,首先獲取網絡通訊類的實例 ConnectivityManagercwjManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);,使用cwjManager.getActiveNetworkInfo().isAvailable(); 來返回是否有效,如果為True則表示當前Android手機已經聯網,可能是WiFi或GPRS、HSDPA等等,具體的可以通過 ConnectivityManager 類的getActiveNetworkInfo()方法判斷詳細的接入方式,需要註意的是有關調用需要加入<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>這個權限,android開發網提醒大傢在真機上Market和Browser程序都使用瞭這個方法,來判斷是否繼續,同時在一些網絡超時的時候也可以檢 查下網絡連接是否存在,以免浪費手機上的電力資源。

5. Drawable、Bitmap、Canvas和Paint的關系

很 多網友剛剛開始學習Android平臺,對於Drawable、Bitmap、Canvas和Paint它們之間的概念不是很清楚,其實它們除瞭 Drawable外早在Sun的J2ME中就已經出現瞭,但是在Android平臺中,Bitmap、Canvas相關的都有所變化。

  首先讓我們理解下Android平臺中的顯示類是View,但是還提供瞭底層圖形類android.graphics,今天所說的這些均為graphics底層圖形接口。

  Bitmap – 稱作位圖,一般位圖的文件格式後綴為bmp,當然編碼器也有很多如RGB565、RGB888。作為一種逐像素的顯示對象執行效率高,但是缺點也很明顯存儲效率低。我們理解為一種存儲對象比較好。

  Drawable – 作為Android平下通用的圖形對象,它可以裝載常用格式的圖像,比如GIF、PNG、JPG,當然也支持BMP,當然還提供一些高級的可視化對象,比如漸變、圖形等。

  Canvas – 名為畫佈,我們可以看作是一種處理過程,使用各種方法來管理Bitmap、GL或者Path路徑,同時它可以配合Matrix矩陣類給圖像做旋轉、縮放等操作,同時Canvas類還提供瞭裁剪、選取等操作。

   Paint – 我們可以把它看做一個畫圖工具,比如畫筆、畫刷。他管理瞭每個畫圖工具的字體、顏色、樣式。

  如果涉及一些Android遊戲開發、顯示特效可以通過這些底層圖形類來高效實現自己的應用。

6. Activity切換導致的onCreate重復執行

部 分網友會發現Activity在切換到後臺或佈局從橫屏LANDSCAPE切換到PORTRAIT,會重新切換Activity會觸發一次 onCreate方法,我們可以在androidmanifest.xml中的activit元素加入這個屬性android:configChanges="orientation|keyboardHidden" 即可,比如

<activity android:name=".android123" android:configChanges="orientation|keyboardHidden" android:label="@string/app_name">

  同時在Activity的Java文件中重載onConfigurationChanged(ConfigurationnewConfig)這個方法,這樣就不會在佈局切換或窗口切換時重載onCreate等方法。代碼如下:

@Override
    public void onConfigurationChanged(Configuration newConfig)
    {
       super.onConfigurationChanged(newConfig);
     if (this.getResources().getConfiguration().orientation== Configuration.ORIENTATION_LANDSCAPE)
     {
//land
     }
     else if (this.getResources().getConfiguration().orientation== Configuration.ORIENTATION_PORTRAIT)
     {
//port
     }
    }

 

摘自 LuoXianXiong,您的夥伴

發佈留言