安卓基礎面試一

         1,安卓的體系架構
(1)底層是Linux系統內核層,安卓是基於linux2.6版本開發的,包含各種應用驅動:DisplayDriver,CameraDriver,
Flash Memory Driver,Binder(IPC)Driver,Keypad Driver,Wifi Driver,Dudio Driver,Power Management
(2)第三層是各自類庫和安卓運行環境
類庫:SurfaceManager ,Media Framework,SQLite,OpenGL  |  ES, FreeType,WebKit, SGL,SSL,libc。
安卓運行環境:Core Libraries,Dalvik Virtual Machine
(3)第二層應用程序框架層
Activity Manager,Window Manager, Content  Provider, View System,Package Manager,Telephony Manager,Rescoure  Manager,Location Manager,Notification  Manager
(4)第一層是應用程序層
Home,Contacts,Phone,Browser等等
      2,jvm和dvm的區別(安卓虛擬機和java虛擬機)
(1)DVM 基於寄存器,JVM基於棧,基於寄存器的編譯花費的時間更短
(2)Dalvik程序只包含一個.dex,JVM則爲多個.class;

(3)Dalvik允許多個實例,每一個實例作爲一個獨立的linux進程執行,可以防止一個程序的崩潰導致所有程序都崩潰;

(4)性能:完成同樣的事情,基於棧的虛擬機需要更多的指令,意味着更多的指令分派和 內存訪問次數,這是 JVM 的執行性能不如 Dalvik VM 的原因之一。
3,點擊事件的四種方式
(1)內部類
private class MyListener implements OnClickListener
(2)匿名內部類
bt.OnClickListener(new OnClickListener());
(3)讓activity直接實現OnClickListener接口(適合用於多個按鈕的點擊事件)
public class MainActivity extends Activity implements OnClickListener
(4)直接在佈局xml文件中指定點擊事件的方法名
OnClick:="show"
public void show(View view)
4,四大組件,五大布局
四大組件:Activity  活動  Service  服務 BroadcastReciver 廣播接收者   Content Provider 內容提供者
五大布局:線性佈局(LinearLayout)   相對佈局 (RelativeLayout) 幀佈局 (FrameLayout) 表格佈局(TableLayout)
 絕對佈局 (AbsoluteLayout)已過時,因爲他精確到一個點,在不同屏幕上顯示的位置不同,適配的屏幕不同佈局不同,不能適用於所有手機
5,根據是否知道應用程序的源代碼
* 黑盒測試 不知道程序的源代碼,但是知道程序的功能,根據輸入測試輸出
* 白盒測試 知道程序的源代碼,寫一寫測試邏輯跑這個程序的代碼
6,Activity的生命週期
activity的生命週期:
 onCreate()  onStart()  onReaume()  onPause()   onStop()   onDestroy()  onRestart()

第一個完整的生命週期:
當Activity一啓動時調用的方法有:
onCreate()  onStart()  onReaume()
當點擊返回按鈕時執行的方法有:
onPause()   onStop()   onDestroy()
再點擊應用的時調用的方法有:
onCreate()  onStart()  onReaume()

第二個完整的生命週期:
當Activity一啓動時調用的方法有:
onCreate()  onStart()  onReaume()
當點擊home鍵時執行的方法有:
onPause()   onStop()   
再點擊應用的時候執行的方法有:
 onRestart()  onStart()  onReaume()

第三個完整的生命週期:
當Activity一啓動時調用的方法有:
onCreate()  onStart()  onReaume()
當跳轉到另一個activity時執行的方法有:
onPause()   onStop()  
當點擊返回按鈕時執行的方法有:
onRestart()  onStart()  onReaume()
    
第四個完整的生命週期:
當你要跳轉的activity 的樣式是theme.Dialog主題形式時:
只執行:onPause()方法activity處於暫停狀態
 當你彈出對話框的時候,就不會執行生命週期,他屬於activity的一部分
7,註冊廣播的方式
(1)常駐型廣播:是在清單文件的application裏面定義receiver並設置要接收的action
靜態註冊方式的特點:不管該應用程序是否處於活躍狀態,都會進行監聽。
Intent intent = new Intent();
intent.setAction("MyReceiver_Action");
context.sendBroadcoast();

 <receiver android:name="MyReceiver" >
  <intent-filter>
                <action android:name="MyReceiver_Action" />
            </intent-filter>
</receive>
(2)非常駐型廣播:
動態註冊方式在activity裏面調用函數來註冊,和靜態的內容差不多。
動態註冊方式特點:在代碼中進行註冊後,當應用程序關閉後,就不再進行監聽。
MyReceiver receiver=new MyReceiver();
IntentFilter filter=new IntentFilter("MyReceiver_Action");
registerReceiver(receiver,filter);//註冊廣播接收器
8,Handler機制
子線程中不能修改UI,修改UI的操作都是在主線程中完成,安卓中避免anr的出現,就出現了一個Hanlder機制,把一些耗時的操作放到子線程中,解決了主線程中有大量的耗時操作和anr的問題,Handler機制是網絡請求等一些耗時操作通過handler對象把msg。obj對象攜帶的數據發送給消息隊列,消息隊列再與Looper對象進行溝通looper對象把消息發送給主線程,主線程對UI進行操作
9,Aidl是什麼,它的作用是什麼
Aidl是安卓接口定義語言的意思。作用是讓兩個應用之間進行跨界通訊
10,Xml解析有幾種方式    
sax pull dom 三種
11,數據存儲方式(5種)
(1)網絡存儲數據
(2)使用sharedPreferences存儲數據
(3)文件存儲數據
(4)SQLite數據庫存儲數據
(5)使用ContentProvider存儲數據
12,OOM異常是什麼?原因是什麼?
out of memory 內存泄漏
原因:一,加載對象過大
二,相應資源過多,沒有來得及釋放
13,get和post的區別
(1)get是從服務器上獲取數據,post是向服務器傳送數據
(2)get的安全性非常低,post的安全性較高,但get的執行效率卻比post好
(3)get傳送的數據量較小,post傳送的數據量較大
(4)get方式:服務器端用Request.QueryString獲取變量的值。post方式,服務器端用Request.Form獲取提交的數據
(5)get是把參數數據隊列加到提交表單的action屬性所指的URL中,值和表單的各個字段一一對應,在URL中可以看到
post是通過HTTP post機制,將表單內各個字段與其內容放置在HTMLHEADER內一起傳送到action屬性所指的URL地址,用戶看不到這個過程。
14,listview怎麼優化?
複用convertView對vew進行優化和viewHolder對控件進行復用
15,權重是什麼?作用是什麼?
權重是在線性佈局中的一個屬性layout_weight,與Layout_height="0dp"一起使用,作用是剩餘空間分配
16,創建數據庫的步驟
(1)拿到數據庫的幫助類對象,並在構造函數中給數據庫起一個名字
(2)重寫幫助類的onCreate()和onUpdate()方法
(3)在onCreate()方法中執行sql語句,插入字段的SQL語句,並給數據庫創建一個表
(4)在onUpdate()方法中執行sql語句,但是這個語句是修改字段的更新數據庫的語句
(5)在Activity中調用繼承了數據庫幫助類的對象
(6)通過幫助類獲取到數據庫這個文件
17,Activity的四種啓動模式
(1)Standard標準模式  每次啓動一個Acitivity都會創建一個Activity對象,不管這個Activity是否存在
(2)SingleTop單一頂部模式,想要啓動哪個activity就把它創建中棧頂,如果在棧頂直接複用
(3)SingleTask單一任務棧,想要調用哪個activity就把與他在同一個棧內的其他activity都移除掉,並且移到棧頂,如果不存在直接在棧頂創建
(4)SingleInstance單例模式,想要調用activity時就把這個activity移動到一個新棧中,就不會再重新創建這個對象了,以後可以直接調用,當移動到新棧後,原棧的activity就會消失
18,數據庫增刪改查的方法
(1)通過SQL語句實現
(2)通過安卓中封裝好的方法
19,顯式意圖和隱式意圖
顯示意圖:明確指定組件名的Intent。
在應用程序的java代碼中
Intent intent = new Intent();  
intent.setAction(Activity1.this,Activity2.class);   
startActivity(intent);   
隱式意圖:沒有明確指定組件名的Intent
必須要設置action才能啓動意圖
而且java代碼中的action等數據要與清單文件中的配置信息保持一致
20,dp和px的區別
dp是設備獨立像素,屏幕寬高和像素的比值
px是像素,也就是真實屏幕的大小
21,Fragment的生命週期
onCreate()  onCreateView()  onStart()  onResume()  onPause()  onStop()   onDestroyView()  onDestroy()
22,兩個Activity怎麼傳參
利用intent對象攜帶數據,startActivityForResult()方法並且重寫onActivityResult()方法
23,R文件丟失了怎麼辦?
第一種情況:先找出錯誤來,有可能是包名或圖片的名稱不符合要求,修改過來保存就好了
第二種情況:(1)從別的工程裏拷貝一份R文件過來,隨意改動xml裏的一個控件,選中項目,點擊Project———>clean
清理一下項目。
(2)選中項目,右鍵選擇Android Tools---->Fix Project Properties
(3)選中項目,右鍵Properties——》Android,選擇相應的版本,點擊OK
24,檢驗內存卡是否被掛載?
掛載就是你的手機可以訪問sd卡了
判斷外部存儲的狀態是否等於媒體安裝好的
Enviroment.getExternalStorageState().equals(Enviroment.MEDIA_MOUNTED)
25,網絡請求 的方式
get post httpClient 異步httpClient
26,動畫
逐幀動畫和屬性動畫和補間動畫
補間動畫包括旋轉,縮放,透明度,平移的效果(rotateAnimation,ScaleAnimation,alphaAnimation,TranslateAnimation)
屬性動畫:ObjectAnimator


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章