Android的四大組件是哪些它們的作用?
答ActivityActivity是Android程序與用戶交互的窗口是Android構造塊中最基本的一種它需要為保持各界面的狀態做很多持久化的事情妥善管理生命周期以及一些跳轉邏輯
service後台服務於Activity封裝有一個完整的功能邏輯實現接受上層指令完成相關的食物定義好需要接受的Intent提供同步和異步的接口
Content Provider是Android提供的第三方應用數據的訪問方案可以派生Content Provider類對外提供數據可以像數據庫一樣進行選擇排序屏蔽內部數據的存儲細節向外提供統一的借口模型大大簡化上層應用對數據的整合提供了更方便的途徑
BroadCast Receiver接受一種或者多種Intent作觸發事件接受相關消息做一些簡單處理轉換成一條Notification統一了Android的事件廣播模型
請介紹下Android中常用的五種布局
常用五種布局方式分別是FrameLayout(框架布局)LinearLayout (線性布局)AbsoluteLayout(絕對布局)RelativeLayout(相對布局)TableLayout(表格布局)
一FrameLayout所有東西依次都放在左上角會重疊這個布局比較簡單也只能放一點比較簡單的東西二LinearLayout線性布局每一個LinearLayout裡面又可分為垂直布局(android:orientation=;vertical;)和水平布局(android:orientation=;horizontal; )當垂直布局時每一行就只有一個元素多個元素依次垂直往下水平布局時只有一行每一個元素依次向右排列三AbsoluteLayout絕對布局用XY坐標來指定元素的位置這種布局方式也比較簡單但是在屏幕旋轉時往往會出問題而且多個元素的時候計算比較麻煩四RelativeLayout相對布局可以理解為某一個元素為參照物來定位的布局方式主要屬性有相對於某一個元素android:layout_below android:layout_toLeftOf相對於父元素的地方android:layout_alignParentLeftandroid:layout_alignParentRigh五TableLayout表格布局每一個TableLayout裡面有表格行TableRowTableRow裡面可以具體定義每一個元素每一個布局都有自己適合的方式這五個布局元素可以相互嵌套應用做出美觀的界面
android中的動畫有哪幾類它們的特點和區別是什麼
答兩種一種是Tween動畫還有一種是Frame動畫Tween動畫這種實現方式可以使視圖組件移動放大縮小以及產生透明度的變化;另一種Frame動畫傳統的動畫方法通過順序的播放排列好的圖片來實現類似電影
android 中有哪幾種解析xml的類?官方推薦哪種?以及它們的原理和區別
答XML解析主要有三種方式SAXDOMPULL常規在PC上開發我們使用Dom相對輕松些但一些性能敏感的數據庫或手機上還是主要采用SAX方式SAX讀取是單向的優點:不占內存空間解析屬性方便但缺點就是對於套嵌多個分支來說處理不是很方便而DOM方式會把整個XML文件加載到內存中去這裡Android開發網提醒大家該方法在查找方面可以和XPath很好的結合如果數據量不是很大推薦使用而PULL常常用在JME對於節點處理比較好類似SAX方式同樣很節省內存在JME中我們經常使用的KXML庫來解析
ListView的優化方案
答如果自定義適配器那麼在getView方法中要考慮方法傳進來的參數contentView是否為null如果為null就創建contentView並返回如果不為null則直接使用在這個方法中盡可能少創建view
給contentView設置tag(setTag())傳入一個viewHolder對象用於緩存要顯示的數據可以達到圖像數據異步加載的效果
如果listview需要顯示的item很多就要考慮分頁加載比如一共要顯示條或者更多的時候我們可以考慮先加載條等用戶拉到列表底部的時候再去加載接下來的條
請介紹下Android的數據存儲方式
答使用SharedPreferences存儲數據文件存儲數據SQLite數據庫存儲數據使用ContentProvider存儲數據網絡存儲數據
PreferenceFile DataBase這三種方式分別對應的目錄是/data/data/Package Name/Shared_Pref /data/data/Package Name/files /data/data/Package Name/database
一使用SharedPreferences存儲數據
首先說明SharedPreferences存儲方式它是 Android提供的用來存儲一些簡單配置信息的一種機制例如登錄用戶的用戶名與密碼其采用了Map數據結構來存儲數據以鍵值的方式存儲可以簡單的讀取與寫入具體實例如下
void ReadSharedPreferences(){
String strNamestrPassword;
SharedPreferences user = getSharedPreferences(user_info);
strName = usergetString(NAME);
strPassword = user getString(PASSWORD);
}
void WriteSharedPreferences(String strNameString strPassword){
SharedPreferences user = getSharedPreferences(user_info);
ueredit();
userputString(NAME strName);
userputString(PASSWORD strPassword);
usercommit();
}
數據讀取與寫入的方法都非常簡單只是在寫入的時候有些區別先調用edit()使其處於編輯狀態然後才能修改數據最後使用commit()提交修改的數據實際上SharedPreferences是采用了XML格式將數據存儲到設備中在DDMS中的File Explorer中的/data/data/<package name>/shares_prefs下使用SharedPreferences是有些限制的只能在同一個包內使用不能在不同的包之間使用
二文件存儲數據
文件存儲方式是一種較常用的方法在Android中讀取/寫入文件的方法與 Java中實現I/O的程序是完全一樣的提供了openFileInput()和openFileOutput()方法來讀取設備上的文件具體實例如下:
String fn = moandroidlog;
FileInputStream fis = openFileInput(fn);
FileOutputStream fos = openFileOutput(fnContextMODE_PRIVATE);
三網絡存儲數據
網絡存儲方式需要與Android 網絡數據包打交道關於Android 網絡數據包的詳細說明請閱讀Android SDK引用了Java SDK的哪些package?
四ContentProvider
ContentProvider簡介
當應用繼承ContentProvider類並重寫該類用於提供數據和存儲數據的方法就可以向其他應用共享其數據雖然使用其他方法也可以對外共享數據但數據訪問方式會因數據存儲的方式而不同如采用文件方式對外共享數據需要進行文件操作讀寫數據采用sharedpreferences共享數據需要使用sharedpreferences API讀寫數據而使用ContentProvider共享數據的好處是統一了數據訪問方式
Uri類簡介
Uri代表了要操作的數據Uri主要包含了兩部分信息需要操作的ContentProvider 對ContentProvider中的什麼數據進行操作一個Uri由以下幾部分組成
schemeContentProvider(內容提供者)的scheme已經由Android所規定為content://…
主機名(或Authority)用於唯一標識這個ContentProvider外部調用者可以根據這個標識來找到它
路徑(path)可以用來表示我們要操作的數據路徑的構建應根據業務而定如下
要操作contact表中id為的記錄可以構建這樣的路徑:/contact/
要操作contact表中id為的記錄的name字段 contact//name
要操作contact表中的所有記錄可以構建這樣的路徑:/contact?
要操作的數據不一定來自數據庫也可以是文件等他存儲方式如下:
要操作xml文件中contact節點下的name節點可以構建這樣的路徑/contact/name
如果要把一個字符串轉換成Uri可以使用Uri類中的parse()方法如下
Uri uri = Uriparse(;content://comchangchenntactprovider/contact;)
UriMatcherContentUrist和ContentResolver簡介
因為Uri代表了要操作的數據所以我們很經常需要解析Uri並從 Uri中獲取數據Android系統提供了兩個用於操作Uri的工具類分別為UriMatcher 和ContentUris 掌握它們的使用會便於我們的開發工作
UriMatcher用於匹配Uri它的用法如下
首先把你需要匹配Uri路徑全部給注冊上如下
//常量UriMatcherNO_MATCH表示不匹配任何路徑的返回碼()
UriMatcher uriMatcher = new UriMatcher(UriMatcherNO_MATCH);
//如果match()方法匹配content://comchangchenntactprovider /contact路徑返回匹配碼為
uriMatcheraddURI(comchangchenntactprovider contact );//添加需要匹配uri如果匹配就會返回匹配碼
//如果match()方法匹配 content://comchangchenntactprovider/contact/路徑返回匹配碼為
uriMatcheraddURI(comchangchenntactprovider contact/# );//#號為通配符
注冊完需要匹配的Uri後就可以使用uriMatchermatch(uri)方法對輸入的Uri進行匹配如果匹配就返回匹配碼匹配碼是調用 addURI()方法傳入的第三個參數假設匹配 content://comchangchenntactprovider/contact路徑返回的匹配碼為
ContentUris用於獲取Uri路徑後面的ID部分它有兩個比較實用的方法
withAppendedId(uri id)用於為路徑加上ID部分
parseId(uri)方法用於從路徑中獲取ID部分
ContentResolver當外部應用需要對ContentProvider中的數據進行添加刪除修改和查詢操作時可以使用 ContentResolver 類來完成要獲取ContentResolver 對象可以使用Activity提供的getContentResolver()方法 ContentResolver使用insertdeleteupdatequery方法來操作數據
From:http://tw.wingwit.com/Article/program/yd/201404/30440.html