Android開發新手必備16個知識

來源:互聯網
上載者:User

標籤:android   android開發   

 Android開發新手必備,這是我在麥子學院論壇裡面看見的,覺得很不錯,分享給大家:
1、Activity生命週期,橫豎屏切換時候Activity狀態變化。
生命週期:
完成的生命週期:
即從一個Activity出現到消失,對應的周期方法是:onCreate到onDestroy ;
啟動:
onCreate()->onStart()->onResume三個方法;
BACK鍵:
當我們按BACK鍵時,我們這個應用程式將結束,這時候我們將先後調用onPause()->onStop()->onDestory()三個方法;
HOME鍵:
onPause()->onStop();此時應用程式沒有被銷毀;
再次啟動:onRestart()->onStart()->onResume()三個方法
橫豎屏切換:
(1)不設定Activity的android:configChanges時:
模擬器這種情況切屏會重新調用各個生命週期,切橫屏時會生命週期執行一次,切豎屏時生命週期會執行兩次,且橫豎屏onConfigurationChanged未被調用。
但是在手機上測試結果為:生命週期都只執行一次,且橫豎屏onConfigurationChanged未被調用。
(2)設定Activity的android:configChanges=”orientation”時:
模擬器這種情況切屏還是會重新調用各個生命週期,切橫屏onConfigurationChanged未執行、豎屏時onConfigurationChanged執行1次。
但是在手機上測試結果為:生命週期未發生變化,且橫豎屏onConfigurationChanged都只執行一次。
(3)設定Activity的android:configChanges=”orientation|keyboardHidden”時:
模擬器這種情況切屏不會重新調用各個生命週期,切橫屏時onConfigurationChanged會執行1次,切豎屏時onConfigurationChanged方法調用2次。
但是在手機上測試結果為:橫豎屏onConfigurationChanged都只執行一次。
2、如果背景Activity由於某種原因被系統回收了,如何在被系統回收之前儲存目前狀態?
onSaveInstanceState();
當你的程式中一個Activity A在運行時候,主動或者被動運行另一個Activity B,這個時候A會執行onSaveInstanceState()。
B完成後又來找A,這個時候有兩種情況:一個是A被回收,一個是A沒被回收,被回收的話則需要重新調用onCreate()方法,不同的是這回onCreate()方法中帶上了參數,saveInstanceState;而沒被回收的就直接執行onResume(),跳過onCreate()方法。
3、啟動一個應用程式,可以主介面點擊表徵圖進入,也可以從一個程式中跳轉進去,二者有什麼區別?
從主介面進入:
是執行androidMainfest.xml檔案中,category標示為android.intent.action.MAIN的Activity;
屬於顯式調用;
從其他程式跳轉進入:
屬於隱式調用,Android系統根據Activity的Intent-Filter來選擇使用哪個Activity來響應;
4、Android有哪些儲存方式?各自適用於儲存什麼類型的資料?
4種儲存方式:
(1) SharedPreference;
類似CS開發中的INI檔案,用來儲存應用程式中一些簡單屬性,位於:
/data/data/<packagename>d_prefs_***.xml,我們無法在多個App中共用此檔案;
(2) 檔案儲存體;
檔案用於儲存大資料,採用java.io.*庫提供I/O介面來讀寫。優點是可以儲存大容量的資料,缺點是檔案更新或者格式改變可能導致巨大的編程工作;
(3) SQLite資料庫;
SQLite是一個輕量級的資料庫,Android封裝了一個SQLiteDatabase的類,該類封裝了一些操作資料庫的API,改用該類可以進行資料庫操作。
(4) ContentProvider
由於Android中資料是私人的,如果需要在其他應用程式中使用這些資料,就需要用到ContentProvider。
ContentProvider是所有應用程式之間資料存放區和檢索的一個橋樑,他的作用就是使得各個應用程式之間實現資料共用。
Android系統已經為常見的一些資料提供了ContentProvider(片、視頻、音頻、通訊錄);
每個ContengProvider都會對外提供一個公用的URI,如果有應用程式資料需要共用時,就需要用ContentProvider為這些資料提供一個URI,然後其他應用程式就可以這個URI對資料進行操作。
5、Serializable與Parcelable區別。
Serializable 是一個標準Java介面;
Parcelable 是一個Android特有的介面,他要比Seriallizable效率高一些。
(1)在使用記憶體的時候,Parcelable效能要比Serializable高。
(2)Parcelable不能使用在要將資料存放區在磁碟的情況,因為他在外界有變化的情況下,不能保證資料的持久性。
(3)Seriallizable在序列化的時候會產生大量的臨時變數,從而引起頻繁的GC。
6、AsyncTask可以線上程中建立嗎?asyncTask.execute()可以執行多次嗎,如果不能的話,怎麼實現?
不可以;
AsyncTask的特點是任務在主線程之外運行,而回調方法是在主線程中執行,這就有效地避免了使用Handler帶來的麻煩。
只能執行一次;
7、適配不同解析度螢幕時,布局、素材的注意事項?
(1)關於布局XML檔案
在res目錄下建立不同的layout檔案夾,比如layout-640×360,layout-800×480,所有的layout檔案在編譯之後都會寫入R.java裡,而系統會根據螢幕的大小自己選擇合適的layout進行使用。
(2)關於圖片資源的設計
res目錄下,建drawable-mdpi、drawable-ldpi、drawable-hdpi三個目錄,這三個主要是為了支援多解析度。drawable-hdpi裡面存放高解析度的圖片,drawable-mdpi裡面存放中等解析度的圖片,drawable-ldpi裡面存放低解析度的圖片,系統會根據機器的解析度來分別到這幾個檔案夾裡面去找對應的圖片。在開發程式時為了相容不同平台不同螢幕,各自檔案夾根據需求均存放不同版本圖片。
可以先協助設計師針對960X640解析度的手機設計一套圖,這套圖正好可以給IOS 4使用;
將這套圖縮小50%,得到的圖就直接可以給IOS 3以及480X320的手機;
將這套圖縮小到80%,得到的圖就直接可以給800X480手機使用;
然後你仔細觀察縮小得來的圖,如果發現某一張看著實在不好看,就讓設計師重新設計一個,因為圖縮小的話,可能會變形什麼的。。
這樣下來,就已經實現了960X640、800X480、480X320三種解析度手機了;
接下來…
854X480解析度手機可直接使用800X480的圖,當然你需要專門設計幾張特殊的圖,比如splash、aboutMe等。。
至於320X240,忽略吧。。
至於更高解析度的手機,重新設計吧。。
另外,好好使用9.png;
9.png格式的圖片是安卓平台上新創的一種被展開卻不失真的東西,他可以保證圖片被展開之後不失真、不變形。
developer.android.com/guide…
(3)關於布局檔案中的單位
盡量用dp、dip;
8、如果一個ListView裡面有超過500Item,會有效能問題嗎?怎麼最佳化?如果每個Item中都包含一個網狀圖片呢?
ListView最佳化:
(1)使用contentView;
(2)使用viewHolder;
(3)圖片資料使用非同步載入與緩衝機制;
9、Gallery控制項如果同時顯示5張超過2M的網狀圖片,需要做什嗎?
(1)縮放尺寸載入,decodeStream;
(2)緩衝到本地,不用下載同樣的圖片了;
(3)考慮使用軟引用,載入時先從軟引用中載入,軟引用中沒有的話,則去本地讀取,本地沒有的話,從網路載入,載入的時候請注意縮放。
10、實現Android通訊錄備份到SDCard的實現思路。
Android系統提供了通訊錄資訊共用的ContentProvider,我們只要使用這個ContentProvider讀取到通訊錄資料,並寫到SDCard上便可。
11、adb,ddms分別是做什麼的?列舉幾個adb命令;
adb是Android的主要調試工具,Android debugging beidge,ddms是一個建立在adb基礎上的圖形化工具。
adb install /home/myname/test.apk
adb devices
adb push
adb pull
12、Android應用程式發布時候為什麼要簽名?簡述簽名原理。
為什麼要簽名?
(1) 開發人員身份認證;
由於開發人員可能通過完全相同的Package Name開替換已經安裝的程式,以此可以保證App不被替換;
(2) 保證資訊傳輸的完整性
簽名,對包中每個檔案進行處理,以此確保包中內容不被替換。
(3)防止交易過程中抵賴的發生,這是Market對應用程式的要求
簽名的原理:

13、如何打包一下非一般資源,比如db資料檔案,音效檔,字型檔?
可以使用res/raw和assets:
(1)兩者目錄下的檔案在打包後會原封不動的儲存在apk包中,不會被編譯成二進位。
(2)res/raw中的檔案會被映射到R.java檔案中,訪問的時候直接使用資源ID即R.id.filename;assets檔案夾下的檔案不會被映射到R.java中,訪問的時候需要AssetManager類。
(3)res/raw不可以有目錄結構,而assets則可以有目錄結構,也就是assets目錄下可以再建立檔案夾
(4)這兩個目錄中檔案都不能太大,官方資料時1M,如果超過1M可以考慮將檔案切割,使用時候在拼接。
14、在使用WebView時,裡面的JS怎麼才能調用Java函數呢?反之呢?
Java中調用Javascript:
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl(“javascript:test()”);
javaScript中調用Java:
mWebView.addJavascriptInterface(obj,”demo”);
15. 如何安全退出已調用多個Activity的Application?
對於單一Activity的應用來說,退出很簡單,直接finish()即可。
當然,也可以用killProcess()和System.exit()這樣的方法。
但是,對於多Activity的應用來說,在開啟多個Activity後,如果想在最後開啟的Activity直接退出,上邊的方法都是沒有用的,因為上邊的方法都是結束一個Activity而已。
一般的做法:
每開啟一個Activity,就記錄下來。在需要退出時,關閉每一個Activity即可。
1.public class MyApp extends Application {private List<Activity> mainActivity = new ArrayList<Activity>();public List<Activity> MainActivity () {return mainActivity ;}public void addActivity(Activity act) {mainActivity.add(act);}public void finishAll(){for (Activity act : mainActivity.tasks) {if(!act.isFinishing()){act.finish();}}MainActivity.tasks = null;}@Overridepublic void onCreate() {super.onCreate();setState(we);MyApp appState = (MyApp)getApplicationContext();appState.addActivity(this)}
複製代碼
1.
2.MyApp appState = (MyApp)getApplicationContext();appState .finishAll()
複製代碼
16、註冊BroadcastReciver 有幾種方法?
兩種。
(1)在AndroidManifest.xml進行註冊
1.<receiver><intent-filter><action android:name=”"/></intent-filter></receiver>
複製代碼

這種方法有一個特點即使你的應用程式已經關閉了,但這個BroadcastReceiver依然會接受廣播出來的對象,也就是說無論你這個應用程式時開還是關都屬於活動狀態都可以接受到廣播的事件。
(2)在代碼中註冊

1.IntentFilter filter=new IntentFilter();filter.addAction();

轉自:麥子學院(www.maiziedu.com)

Android開發新手必備16個知識

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.