第一篇:Android面試總結
1.activity的生命周期。
activity主要生命周期的方法說明:
onCreate(Bundle savedInstanceState):創建activity時調用。設置在該方法中,還以Bundle的形式提供對以前儲存的任何狀態的訪問!
onStart():activity變為在屏幕上對用戶可見時調用。
onResume():activity開始與用戶交互時調用(無論是啟動還是重新啟動一個活動,該方法總是被調用的)。
onPause():activity被暫?;蚴栈豤pu和其他資源時調用,該方法用于保存活動狀態的,也是保護現場,壓棧吧!
onStop():activity被停止并轉為不可見階段及后續的生命周期事件時調用。
onRestart():重新啟動activity時調用。該活動仍在棧中,而不是啟動新的活動。
onDestroy():activity被完全從系統內存中移除時調用,該方法被
2.橫豎屏切換時候activity的生命周期
3.android中的動畫有哪幾類,它們的特點和區別是什么
兩種,一種是Tween動畫、還有一種是Frame動畫。Tween動畫,這種實現方式可以使視圖組件移動、放大、縮小以及產生透明度的變化;另一種Frame動畫,傳統的動畫方法,通過順序的播放排列好的圖片來實現,類似電影。
{Android的animation由四種類型組成 XML中
alpha 漸變透明度動畫效果 scale漸變尺寸伸縮動畫效果
translate 畫面轉換位置移動動畫效果 rotate 畫面轉移旋轉動畫效果
JavaCode中
AlphaAnimation ScaleAnimation 漸變透明度動畫效果 漸變尺寸伸縮動畫效果
TranslateAnimation畫面轉換位置移動動畫效果 RotateAnimation 畫面轉移旋轉動畫效果
Android動畫模式
Animation主要有兩種動畫模式: 一種是tweened animation(漸變動畫)XML中 JavaCode alpha AlphaAnimation scaleScaleAnimation
一種是frame by frame(畫面轉換動畫)XML中 JavaCode translate TranslateAnimation rotate RotateAnimation
}
4.handler機制的原理:
andriod提供了 Handler 和 Looper 來滿足線程間的通信。Handler 先進先出原則。Looper類用來管理特定線程內對象之間的消息交換(Message Exchange)。
1)Looper: 一個線程可以產生一個Looper對象,由它來管理此線程里的Message Queue(消息隊列)。
2)Handler: 你可以構造Handler對象來與Looper溝通,以便push新消息到Message Queue里;或者接收Looper從Message Queue取出)所送來的消息。
3)Message Queue(消息隊列):用來存放線程放入的消息。
4)線程:UI thread 通常就是main thread,而Android啟動程序時會替它建立一個Message Queue
5.說說activity,intent,service是什么關系
[教程] 新手入門之應用解析(Activity、Intent、Service等)
Activity, Intent, Service, IntentReceiver, ContentProvider 一般剛開始學Android時對這些基本的東西還是要明確一下的,下面的東西摘自新版android開發教程里面的,介紹比較簡單,希望能夠有幫助。
一、Activity
Activity是android中最今本的應用程序組件,應用程序中,一個Activity通常是一個單獨的屏幕,每一個Activity都被實現為一個單獨的類,這些類都是從Activity基類中繼承來的,Activity類會顯示由視圖控件組成的用戶接口,并對視圖控件的事件做出響應。一個復雜的應用是由多個屏幕顯示組成。這里每一個屏幕的顯示就是一個Activity,從一個屏幕的顯示到另一個新屏幕的顯示并完成相關的事件是很容易實現的,這些屏幕Activity是相互交互的,他們直接通信從而完成相應的功能。當一個新的屏幕打開時,前一個屏幕將會暫停,并保存在歷史堆棧中,用戶可以從歷史堆棧中返回前一個屏幕。當屏幕不再使用時,我們可以從歷史堆棧中刪除它,默認情況下,Android會保留從主屏幕到每一個應用的運行屏幕。Activity代表一個用戶所能看到的屏幕,Activity主要是處理一個應用的整體性工作,如監聽系統事件(按鍵、觸摸屏幕等)、為用戶顯示指定的View、啟動其他Activity等,其他的Activity繼承Activity基類后,通過重寫父類的方法來實現各種功能。
二、Intent
Android專有類Intent的調用是用來進行架構屏幕之間的切換的。Intent是描述應用想要做什么。Intent數據結構中兩個最重要的部分是動作和動作對應的數據,典型的動作類型有:Main(活動的門戶)、View、Pick、Edit等,而動作對應的數據是應URI的形式進行表示的,這里的URI就相當于這些動作的ID,一個動作對應一個動作數據。Android使用了Intent這個特殊類,實現在屏幕與屏幕之間的移動。Intent類用用來描述一個應用將會做什么事情。與之有關系的一個類叫IntentFilter類,相對于intent是一個有效的做事情的請求,一個IntentFilter則用于描述一個Activity(或者IntentReceiver)能夠操作那些intent。一個Activity如果要顯示一個人的聯系方式時,需要事先聲明一個IntentFilter,這個IntentFilter要知道怎么去處理View動作和表示一個人的URI,IntentFilter需要AndroidManifest.xml中 定義,如AndroidManifest.xml中的:
通過解析各種intent,從一個屏幕導航到另一個屏幕是很簡單的。當向前導航時,activity 將會調用startActivity(IntentmyIntent)方法。然后,系統會在所有安裝的應用程序中定義的IntentFilter 中查找,找到最匹配myIntent 的Intent 對應的activity。新的activity 接收到myIntent 的通知后,開始運行。當startActivity 方法被調用將觸發解析myIntent 的動作,這個機制提供了兩個關鍵好處:
A、Activities 能夠重復利用從其它組件中以Intent 的形式產生的一個請求;
B、Activities 可以在任何時候被一個具有相同IntentFilter 的新的Activity 取代。
三、IntentReceiver
當你希望你的應用能夠對一個外部的事件(如當電話呼入時,或者數據網絡可用時,或者到了晚上時)做出響應,你可以使用一個IntentReceiver。雖然IntentReceiver 在感興趣的事件發生時,會使用NotificationManage通知用戶,但它并不能生成一個UI。IntentReceiver 在AndroidManifest.xml 中注冊,但也可以在代碼中使用Context.registerReceiver()進行注冊。當一個intentreceiver 被觸發時,你的應用不必對請求調用intentreceiver,系統會在需要的時候啟動你的應用。各種應用還可以通過使用Context.broadcastIntent()將它們自己的intentreceiver 廣播給其它應用程序。
四、Service
一個Service 是一段長生命周期的,沒有用戶界面的程序。比較好的一個例子就是一個正在從播放列表中播放歌曲的媒體播放器。在一個媒體播放器的應用中,應該會有多個activity,讓使用者可以選擇歌曲并播放歌曲。然而,音樂重放這個功能并沒有對應的activity,因為使用者當然會認為在導航到其它屏幕時音樂應該還在播放的。在這個例子中,媒體播放器這個activity 會使用Context.startService()來啟動一個service,從而可以在后臺保持音樂的播放。同時,系統也將保持這個service 一直執行,直到這個service 運行結束。另外,我們還可以通過使用Context.bindService()方法,連接到一個service 上(如果這個service 還沒有運行將啟動它)。當連接到一個service 之后,我們還可以service 提供的接口與它進行通訊。拿媒體播放器這個例子來說,我們還可以進行暫停、重播等操作。
五、Content Provider
Android 應用程序能夠將它們的數據保存到文件、SQLite 數據庫中,甚至是任何有效的設備中。當你想將你的應用數據與其它的應用共享時,內容提供器就可以發揮作用了。因為內容提供器類實現了一組標準的方法,從而能夠讓其它的應用保存或讀取此內容提供器處理的各種數據類型。數據是應用的核心。在Android 中,默認使用鼎鼎大名的SQLite 作為系統DB。但是在Android 中,使用方法有點小小的不一樣。在Android 中每一個應用都運行在各自的進程中,當你的應用需要訪問其他應用的數據時,也就需要數據在不同的虛擬機之間傳遞,這樣的情況操作起來可能有些困難(正常情況下,你不能讀取其他的應用的db 文件),ContentProvider 正是用來解決在不同的應用包之間共享數據的工具。
1、所有被一個Android 應用程序創建的偏好設置,文件和數據庫都是私有的。
6.android中線程與線程,進程與進程之間如何通信
1、一個 Android 程序開始運行時,會單獨啟動一個Process。
默認情況下,所有這個程序中的Activity或者Service都會跑在這個Process。
默認情況下,一個Android程序也只有一個Process,但一個Process下卻可以有許多個
Thread。
2、一個 Android 程序開始運行時,就有一個主線程Main Thread被創建。該線程主要負責UI界面的顯示、更新和控件交互,所以又叫UI Thread。
一個Android程序創建之初,一個Process呈現的是單線程模型--即Main Thread,所有的任務都在一個線程中運行。所以,Main Thread所調用的每一個函數,其耗時應該越短越好。而對于比較費時的工作,應該設法交給子線程去做,以避免阻塞主線程(主線程被阻塞,會導致程序假死現象)。
3、Android單線程模型:Android UI操作并不是線程安全的并且這些操作必須在UI線程中執行。如果在子線程中直接修改UI,會導致異常。
Android中Handler、Thread(HanlderThread)、Runnable之間的關系
首先說明Android的CPU分配的最小單元是線程,Handler一般是在某個線程里創建的,因而Handler和Thread就是相互綁定的,一一對應。而Runnable是一個接口,Thread是Runnable的子類。所以說,他倆都算一個進程。HandlerThread顧名思義就是可以處理消息循環的線程,他是一個擁有Looper的線程,可以處理消息循環。與其說Handler和一個線程綁定,不如說Handler是和Looper一一對應的。最后需要說明的是,在UI線程(主線程)中: mHandler=new Handler();mHandler.post(new Runnable(){ void run(){ //執行代碼...} });這個線程其實是在UI線程之內運行的,并沒有新建線程。
常見的新建線程的方法是: Thread thread = new Thread();thread.start();HandlerThread thread = new HandlerThread(“string”);thread.start();
7.widget相對位置的完成在antivity的哪個生命周期階段實現
onStart
8.說說mvc模式的原理,它在android中的運用 : MVC(Model_view_contraller)”模型_視圖_控制器”。MVC 應用程序總是由這三個部分組成。Event(事件)導致 Controller改變 Model 或View,或者同時改變兩者。只要 Controller改變了 Models 的數據或者屬性,所有依賴的 View 都會自動更新。類似的,只要 Controller改變了 View,View會從潛在的 Model 中獲取數據來刷新自己。
9.說說在android中有哪幾種數據存儲方式
在Android中,可供選擇的存儲方式有SharedPreferences、文件存儲、SQLite數據庫方式、內容提供器(Content provider)和網絡
10.android中有哪幾種解析xml的類,官方推薦哪種?以及它們的原理和區別
DOM、SAX(Simple API for XML)、XmlPullParser
11.listview你是怎么優化的。
Adapter的作用就是ListView界面與數據之間的橋梁,當列表里的每一項顯示到頁面時,都會調用Adapter的getView方法返回一個View。想過沒有? 在我們的列表有1000000項時會是什么樣的?是不是會占用極大的系統資源?
先看看下面的代碼:
public View getView(int position, View convertView, ViewGroup parent){
View item = mInflater.inflate(R.layout.list_item_icon_text, null);
((TextView)item.findViewById(R.id.text)).setText(DATA[position]);
((ImageView)item.findViewById(R.id.icon)).setImageBitmap((position & 1)== 1 ? mIcon1 : mIcon2);
return item;
}
怎么樣?如果超過1000000項時,后果不堪設想!您可千萬別這么寫!
我們再來看看下面的代碼:
public View getView(int position, View convertView, ViewGroup parent){
if(convertView == null){
convertView = mInflater.inflate(R.layout.item, null);
}
((TextView)convertView.findViewById(R.id.text)).setText(DATA[position]);
((ImageView)convertView.findViewById(R.id.icon)).setImageBitmap((position & 1)== 1 ? mIcon1 : mIcon2);
return convertView;
}
怎么樣,上面的代碼是不是好了很多?系統將會減少創建很多View。性能得到了很大的提升。
還有沒有優化的方法呢? 答案是肯定的:
public View getView(int position, View convertView, ViewGroup parent){
ViewHolder holder;
if(convertView == null){
convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
holder = new ViewHolder();
holder.text =(TextView)convertView.findViewById(R.id.text);
holder.icon =(ImageView)convertView.findViewById(R.id.icon);
convertView.setTag(holder);
} else {
holder =(ViewHolder)convertView.getTag();
}
holder.text.setText(DATA[position]);
holder.icon.setImageBitmap((position & 1)== 1 ? mIcon1 : mIcon2);
return convertView;
}
static class ViewHolder {
TextView text;
ImageView icon;
}
怎么樣?會不會又給您的系統帶來很大的提升呢?看看下面三種方式的性能對比圖您就知道了!
12.view的刷新
Android中對View的更新有很多種方式,使用時要區分不同的應用場合。我感覺最要緊的是分清:多線程和雙緩沖的使用情況。
1.不使用多線程和雙緩沖
這種情況最簡單了,一般只是希望在View發生改變時對UI進行重繪。你只需在Activity中顯式地調用View對象中的invalidate()方法即可。系統會自動調用 View的onDraw()方法。
2.使用多線程和不使用雙緩沖
這種情況需要開啟新的線程,新開的線程就不好訪問View對象了。強行訪問的話會報:android.view.ViewRoot$CalledFromWrongThreadException:Only the original thread that created a view hierarchy can touch its views.這時候你需要創建一個繼承了android.os.Handler的子類,并重寫handleMessage(Message msg)方法。android.os.Handler是能發送和處理消息的,你需要在Activity中發出更新UI的消息,然后再你的Handler(可以使用匿名內部類)中處理消息(因為匿名內部類可以訪問父類變量,你可以直接調用View對象中的invalidate()方法)。也就是說:在新線程創建并
發送一個Message,然后再主線程中捕獲、處理該消息。
3.使用多線程和雙緩沖
Android中SurfaceView是View的子類,她同時也實現了雙緩沖。你可以定義一個她的子類并實現SurfaceHolder.Callback接口。由于實現SurfaceHolder.Callback接口,新線程就不需要android.os.Handler幫忙了。SurfaceHolder中lockCanvas()方法可以鎖定畫布,繪制玩新的圖像后調用unlockCanvasAndPost(canvas)解鎖(顯示),還是比較方便得。
13.IPC及原理
什么是Android操作系統,所謂的Android:是基于Linux內核的軟件平臺和操作系統,早期由Google開發,后由開放手機聯盟Open Handset Alliance)開發。
Linux系統中進程間通信的方式有:socket, named pipe,message queque, signal,share memory。Java系統中的進程間通信方式有socket, named pipe等。android應用程序理所當然可以應用JAVA的IPC
機制實現進程間的通信,取而代之的是Binder通信。Google為什么要采用這種方式呢,這取決于Binder通信方式的高效率。Binder通信是通過linux的binder driver來實現的。Binder通信操作類似線程遷移(thread migration),兩個進程間IPC看起來就象是一個進程進入另一個進程執行代碼然后帶著執行的結果返回。Binder的用戶空間為每一個進程維護著一個可用的線程池,線程池用于處理到來的IPC以及執行進程本地消息,Binder通信是同步而不是異步。Android中的Binder通信是基于Service與Client的,所有需要IBinder通信的進程都必須創建一個IBinder接口。
系統中有一個進程管理所有的system service,Android虛擬機不允許用戶添加非授權的System service,當然現在源碼開發了,我們可以修改一些代碼來實現添加底層system Service的目的。
對用戶程序來說,我們也要創建server,或者Service用于進程間通信,這里有一ActivityManagerService管理JAVA應用層所有的service創建與連接(connect)。disconnect,所有的 Activity也是通過這個service來啟動,加載的。ActivityManagerService也是加載在Systems Servcie中的。
Android虛擬機啟動之前系統會先啟動service Manager進程,service Manager打開binder驅動,并通知binder kernel驅動程序這個進程將作為System Service Manager。然后該進程將進入一個循環,等待處理來自其他進程的數據。用戶創建一個System service后,通過defaultServiceManager得到一個
遠程ServiceManager的接口。
通過這個接口我們可以調用 addService函數將System service添加到Service Manager進程中,然后client可以通過getService獲取到需要連接的目的Service的IBinder對象。這個IBinder是 Service的BBinder在binder kernel的一個參考,所以service IBinder 在binder kernel中不會存在相同的兩個
IBinder對象。
每一個Client進程同樣需要打開Binder驅動程序。對用戶程序而言,我們獲得這個對象就可以通過binder kernel訪問service對象中的方法。Client與Service在不同的進程中,通過這種方式實現了類似線程間的遷移的通信方式,對用戶程序而言當調用Service返回的IBinder接口后,訪問Service中的方法就
如同調用自己的函數。實現接口時有幾個原則:
拋出的異常不要返回給調用者.跨進程拋異常處理是不可取的。IPC調用是同步的。如果你知道一個IPC服務需要超過幾毫秒的時間才能完成地話,你應該避免在Activity的主線程中調用。
也就是IPC調用會掛起應用程序導致界面失去響應.這種情況應該考慮單起一個線程來處理,能在AIDL接口中聲明靜態屬性。IPC的調用步驟:
1.聲明一個接口類型的變量,該接口類型在.aidl文件中定義。
2.實現ServiceConnection。
3.調用ApplicationContext.bindService(),并在ServiceConnection實現中進行傳遞.4.在ServiceConnection.onServiceConnected()實現中,你會接收一個IBinder實例(被調用的Service).調用 YourInterfaceName.Stub.asInterface((IBinder)service)將參數轉換YourInterface類型。
5.調用接口中定義的方法。你總要檢測到DeadObjectException異常,該異常在連接斷開時被拋
出。它只會被遠程方法拋出。
6.斷開連接,調用接口實例中的ApplicationContext.unbindService()
14.Android多線程
在Android下面也有多線程的概念,在C/C++中,子線程可以是一個函數,一般都是一個帶有循環的函數,來處理某些數據,優先線程只是一個復雜的運算過程,所以可能不需要while循環,運算完成,函數結束,線程就銷毀。對于那些需要控制的線程,一般我們都是和互斥鎖相互關聯,從而來控制線程的進度,一般我們創建子線程,一種線程是很常見的,那就是帶有消息循環的線程。
消息循環是一個很有用的線程方式,曾經自己用C在Linux下面實現一個消息循環的機制,往消息隊列里添加數據,然后異步的等待消息的返回。當消息隊列為空的時候就會掛起線程,等待新的消息的加入。這是一個很通用的機制。在Android,這里的線程分為有消息循環的線程和沒有消息循環的線程,有消息循環的線程一般都會有一個Looper,這個事android的新概念。我們的主線程(UI線程)就是一個消息循環的線程。針對這種消息循環的機制,我們引入一個新的機制Handle,我們有消息循環,就要往消息循環里面發送相應的消息,自定義消息一般都會有自己對應的處理,消息的發送和清除,消息的的處理,把這些都封裝在Handle里面,注意Handle只是針對那些有Looper的線程,不管是UI線程還是子線程,只要你有Looper,我就可以往你的消息隊列里面添加東西,并做相應的處理。
但是這里還有一點,就是只要是關于UI相關的東西,就不能放在子線程中,因為子線程是不能操作UI的,只能進行數據、系統等其他非UI的操作。
15.Android為什么要設計4大組件,他們之間的聯系,不設計行不行(主要是為了實現MVC模式,然而java中最難的模式也是這個,很少有產品能將這個模式做得很好【Technicolor 的面試官問的這個】
16,service的周期,activity的周期,談下你對Android內部應用的了解,比如他做電話,以及聯系人等等應用??蚣軐佑泻芏鄸|西還是多看看,熟悉Android怎么做的,不管你做應用程開發還是應用框架層開發很有好處的。在就是你項目經驗,突出你遇到什么難點,然后是怎么解決的!盡量將每個技術點凸顯出來,當然面試官有時候會為了體現你是否真正做過,他會問你,你在這個應用中做那個模塊,用了多少個類之類的問題。偶爾有的面試官會問你,你用過Android自帶的單元測試了沒,怎么用的?當然我面試過很多家單位,有 的是做平板,手機,數字電視,有的是做出個erp之類的客戶端等等,出于前面的三個,基本上都是將Android的全部改掉,如果真正要做Android的話,大家要學的還很多??傊?,一句話,什么樣的面試官都有,去面試的時候要做好一切心理準備,不管是技術還是基礎都得扎實。一個人的交談能力也很重要,總之不是非常標準的普通話,最起碼你說的得讓別人聽得懂,而且得把面試官講得非常徹底,這樣你獲得offer的機會更大,談工資也有優勢~~當然曾經一家公司的面試官跟我說過,技術是不惜錢的,只要你有能力,多少錢他都請。_ 確實,來北京求職期間,牛人真的很多,而且有的面試官也非常好,給了很多忠肯的意見。并不是每個面試官都特想為難你的~最主要的還是想知道你的技術,因為他們也是吃公司飯,得為這個負責。
Basic:
1.基本的UI控件和布局文件
2.UI配套的Adapter的使用
3.Activity, Intent,Service,broadCast Receiver他們的生命周期管理熟悉一下
4.操作手機上的數據庫SQLite應用
17.為什么看好 Android
對于開發人員來講:上手容易,入門簡單,api齊全,適應性強 對于用戶來講:軟件豐富,系統穩定,功能齊全 對于開發商來講:可定制性高,開發成本低,免費。
18.現在在公司做哪些工作(關于 Android)錯
手機軟件開發一般是分平臺的,目前比較火的是iPhone和Android手機平臺上的軟件開發。
一般大學計算機畢業,都會學過相應的編程語言,比如C或C++,有這兩種語言做為基礎,相信你可以快速去掌握其他的編程語言。
如果你想從事iPhone平臺上的開發就要去學習Obj-C語言,想從事Android平臺上的就學習Java語言,除了掌握語言以后,還有的就是不同平臺上的開發工具。
如果你想從事手機軟件開發方面的工作的話,我建議你可以選擇一家專業的移動互聯網開發培訓學校,參加專業的培訓能幫助你更系統更扎實的掌握目前最先進的技術
19.Android 的框架以及一些基礎知識
20.Android 一些方面的領悟(如Android框架的 IoC特性,View System 的狀態機機制等)
21.對多線程的運用和理解,及多線程之間handle的傳值。
22.對android 虛擬機的理解,包括內存管理機制垃圾回收機制。
23.framework工作方式及原理,Activity是如何生成一個view的,機制是什么。
24.android本身的一些限制,不如apk包大小限制,讀取大文件時的時間限制。
25.Linux中跨進程通信的集中方式
1.socket;
2.name pipe命名管道; 3.message queue消息隊列; 4.singal信號量;
5.share memory共享內存;
26.dvm的進程和Linux的進程, 應用程序的進程是否為同一個概念
DVM指dalivk的虛擬機。每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。而每一個DVM都是在Linux 中的一個進程,所以說可以認為是同一個概念。
27.sim卡的EF 文件有何作用
sim卡的文件系統有自己規范,主要是為了和手機通訊,sim本 身可以有自己的操作系統,EF就是作存儲并和手機通訊用的
28.AT命令的User case的概念
1、Use Case的作用:
我個人認為Use Case僅僅用來反映用戶需求,并且在對象分析過程中,能夠起到一個查漏補缺的作用。但是使用“先確定Use Case,再指認對象”實在是一種愚蠢的方法(恕我直言)。我個人認為,指認對象使用Yourdon在《Objuect Oriented Analysis》中提到的使用CheckList的方法在實踐中是比較實用的。我近來讀到的幾本書,也印證了我的想法。就我我個人在實踐中的經驗,使用“首先確定Use Case”策略,非常容易導致分析員滑入“功能分解”的泥沼。而且從Use Case來導出對象將導致拙劣的分析模型。
2、Use Case之間的關系:
UML 1.3中,Use Case之間的關系只有3種,Generalization,Include和Extend,國內出版的關于UML的中文書有兩本,一本是《UML從入門到精通》(其實應該叫做Rose入門),一本是北航的《面向對象的可視化建模技術》,后一本書在這個方面起到了很壞的作用(前一本書我沒有怎么看,大概也好不到哪里去),一是使用了比較老的UML標準,比如使用了Use關系,而且對于Extend和Generalization關系的描述也很混亂,很多人受到了誤導(尤其是Extend關系)。我建議有條件的網友盡量去看英文原版的著作,比如“UML三劍客”的《Unified Modeling Language User Guide》或者直接去讀UML1.3的規范。(而且Use Case之間的關系是用虛線+箭頭表示的,直到Rose 2000對此都沒有支持)
3、Actor和Use Case之間的關系:
在UML 1.3之中,Actor和Use Case之間的關系應該是沒有箭頭的。雖然規范中并沒有明確禁止使用箭頭,但是從字句中隱含的意義來看,應該是沒有箭頭的,而且規范中給出的示例是沒有箭頭的。我認識的很多人,想當然的認為Actor和Use Case之間的關系上的箭頭標示信息流向或者主/被動關系,其實這個關系僅僅表示某個Actor參與了某個Use Case。
29﹑Android 手機操作系統的四層架構?
架構框架以此從上到下:
1.Applications
(應用程序(應用層));
Android 會同一系列核心應用程序包一起發布,該應用程序包包括 email 客戶端,SMS 短消息程序,日歷,地圖,瀏覽器,聯系人管理程序等。所有的應用程序都是使用 JAVA 語 言編寫的。
2.Application FrameWork
(應用程序擴展層(框架));
由于 Android 的手機操作系統是,基于 Liunx 2.6 系統之上封裝而成。所以開發人員可也以直接訪問核心程序所使用的API框架,該核心應用程序的API框架設計簡化了組件的重用,任何一個核心應用程序(模塊)都暴露出它的功能作用,并且其他應用程序也都可以使用該核心應用程序(模塊)的功能(不過的遵守該核心應用程序框架的安全性限制)。同樣,該應用程序的重用機制也使用戶方便使用應程序的相關組件。API 框架隱藏的核心應用程序是一系列的應用程序的服務和系統應用,其中包括如下:
(Android 手機中的 View 是最基本的一個 UI 類)豐富而又可擴展的視圖(手機界面所顯示的組件(Activity上所顯示的))組件,可以用來構建應用程序
如:(視圖)Views, 網格(grids), 文本框(text boxes), 按鈕(button), 放置圖片區(imageview),文本編輯區
(edittext), 文本顯示區(textview),3.Android RunTime Libraries
(Android 系統運行庫);
4.Liunx Kernel
(Android 系統最底層核心系統 Liunx)
Android 的核心系統服務依賴于 Liunx 2.6 內核,如系統安全,內存管理,進程管理,網絡協議棧和驅動模型。Liunx 內核也同時作為硬件和軟件棧之間的抽象層。
30、Android dvm的進程和 Linux 的進程, 應用程序的進程是否為同一個概念
DVM 指 dalivk 的虛擬機。每一個 Android 應用程序都在它自己的進程中運行,都擁有一個獨立的 Dalvik 虛擬機實例。而每一個 DVM 都是在 Linux 中的一個進程,所以說可以認為是同一個概念。
31、sim卡的 EF 文件有何作用
sim 卡的文件系統有自己規范,主要是為了和手機通訊,sim 本身可以有自己的操作 系統,EF就是作存儲并和手機通訊用的
32、嵌入式操作系統內存管理有哪幾種,各有何特性
頁式,段式,段頁,用到了 MMU,虛擬空間等技術
33.什么是嵌入式實時操作系統, Android 操作系統屬于實時操作系統嗎?
嵌入式實時操作系統是指當外界事件或數據產生時,能夠接受并以足夠快的速度予以 處理,其處理的結果又能在規定的時間之內來控制生產過程或對處理系統作出快速響應,并 控制所有實時任務協調一致運行的嵌入式操作系統。主要用于工業控制、軍事設備、航空航天等領域對系統的響應時間有苛刻的要求,這就需要使用實時系統。又可分為軟實時和硬實時兩種,而 android 是基于 linux 內核的,因此屬于軟實時。
34、一條最長的短信息約占多少 byte?
中文 70(包括標點),英文 160,160 個字節
1.2.3.4.5.6.7.8.9.10.11.12.13.14.什么是Activity?
請描述一下Activity生命周期。
兩個Activity之間跳轉時必然會執行的是哪幾個方法。
橫豎屏切換時候Activity的生命周期。
如何將一個Activity設置成窗口的樣式。
你后臺的Activity被系統 回收怎么辦?
如何退出Activity?如何安全退出已調用多個Activity的Application?
如果后臺的Activity由于某原因被系統回收了,如何在被系統回收之前保存當前狀態?
兩個Activity之間怎么傳遞數據?
怎么讓在啟動一個Activity是就啟動一個service?
同一個程序,但不同的Activity是否可以放在不同的Task任務棧中?
Activity怎么和service綁定,怎么在activity中啟動自己對應的service? 什么是Service以及描述下它的生命周期。
Service有哪些啟動方法,有什么區別,怎樣停用Service?
15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.不用service,B頁面為音樂播放,從A跳轉到B,再返回,如何使音樂繼續播放?
什么是IntentService?有何優點? 什么時候使用Service?
請描述一下Intent 和 Intent Filter。Intent傳遞數據時,可以傳遞哪些類型數據? 說說Activity,Intent,Service是什么關系。請描述一下Broadcast Receiver。
在manifest和代碼中如何注冊和使 用 broadcast receiver。請介紹下ContentProvider是如何實現數據共享的。請介紹下Android的數據存儲方式。
為什么要用ContentProvider?它和sql的實現上有什么差別? 請介紹下Android中常用的五種布局。
談談UI中,Padding和Margin有什么區別?
widget相對位置的完成在antivity的哪個生命周期階段實現。
請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關系。AIDL的全稱是什么?如何工作?能處理哪些類型的數據?
請解釋下Android程序運行時權限與文件系統權限的區別。
系統上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?
對多線程的運用和理解,及多線程之間handle的傳值。對android虛擬機的理解,包括內存管理機制垃圾回收機制。
Framework工作方式及原理,Activity是如何生成一個view的,機制是什么。android本身的一些限制,比如apk包大小限制,讀取大文件時的時間限。如何加載的音樂信息,如何改善其效率。
ListView如何提高其效率?
啟動應用后,改變系統語言,應用的語言會改變么?
啟動一個程序,可以主界面點擊圖標進入,也可以從一個程序中跳轉過去,二者有什么區別?
Android程序與Java程序的區別?
Android中Task任務棧的分配。
在Android中,怎么節省內存的使用,怎么主動回收內存?
不同工程中的方法是否可以相互調用?
在Android中是如何實現判斷區分通話記錄中的電話狀態,去電,來電、未接來電?
dvm的進程和Linux的進程, 應用程序的進程是否為同一個概念
sim卡的EF 文件有何作用
如何判斷是否有SD卡?
嵌入式操作系統內存管理有哪幾種,各有何特性。
什么是嵌入式實時操作系統, Android 操作系統屬于實時操作系統嗎? 一條最長的短信息約占多少byte? Linux中跨進程通信的幾種方式。談談對Android NDK的理解。
談談Android的優點和不足之處。
Android系統中GC什么情況下會出現內存泄露呢? Android UI中的View如何刷新。簡單描述下Android 數字簽名。什么是ANR 如何避免它?
59.60.61.62.63.64.65.66.android中的動畫有哪幾類,它們的特點和區別是什么?
handler機制的原理。
android中線程與線程,進程與進程之間如何通信。
說說mvc模式的原理,它在android中的運用。
android中有哪幾種解析xml的類,官方推薦哪種?以及它們的原理和區別。
DDMS與TraceView的區別? res目錄有默認幾項resource。android的哪個版本是一次重大的升級?
第二篇:個人面試android面試總結.
本人面試過程部分有價值的題目摘錄如下:仔細想想答案都很簡單
不全但是有一定的代表性
去的幾家公司都是外包,項目緊急不會去看你項目上的那些小應用,能干活就行。
外包IBM:考得很基礎,但是沒真正的經驗平時不會去記
1>dip設備獨立像素
這個和設備硬件有關,一般為了支持WVGA、HVGA和QVGA 推薦使用這個,不依賴像素
480*320(160dpi):10*10dip = 10*10px 840*480(240dpi): 10*10dip = 15*15px Pixs = dips *(density / 160)2> WVGA、HVGA和QVGA 屏幕標準
3>屏幕適配.(實際項目中不會提供三套drawable圖片資源)Android對于屏幕適配的解決方案分析 圖片適配:9.png 其他適配: 1.Android將UI設計部分和代碼邏輯部分分離開來,獨立成一個XML文件,方便開發人員修改。
2.使用的長度單位是密度而不是像素。像素是自適應的大敵,固定了絕對坐標的像素值,就別想再好好安心地讓它自個兒適應屏幕了。Android推薦使用dp作為長度單位。dp會根據手機的分辨率而自動調整大小。3.布局器功能強大。Android的布局器分為五種:LinearLayout,提供水平/垂直平鋪的布局器;TableLayout,提供行和 列的的布局;FrameLayout,幀布局器,提供分層的布局;AbsoluteLayout,使用絕對坐標來定義控件的位 置;RelativeLayout,布局器中的控件用相對位置來布局。布局器的大小有自適應內容和與父控件相同兩種。這些布局器完全可以承擔起程序中基本 的布局要求。
4.Android中有一個密度的概念,表示每英寸有多少個顯示點。當沒有與手機分辨率相匹配的屏幕適配方案時,會根據手機的屏幕密度選取一個最接近的屏幕密度的適配方案,這樣會讓圖片的失真達到最低。
5> Include使用與傳參 組件復用
6>橫屏豎屏切換處理
主要是切換時生命周期方法(結合你在項目中的應用)
7>應用程序放在真機什么目錄下 以及常見的目錄有哪些 系統應用程序 system/app 自己安裝的應用 data/app
8> 你們項目需求怎么做的,請描述下
奧信面試:(主要是他們公司項目中的東西,演示功能問怎么實現)ImageView點擊后更改背景色
Xml:selector + item
下載后回到剛剛的頁面更新頁面ListView對應Item的圖標
1.startActivityForResult
2.下載完成發送廣播
從網絡上下載大圖片
(可以作為項目難點陳述)ListView異步加載圖片 +緩存()
Handler + 線程池 + 開啟內存緩存(SoftReference)
Handler + 線程池 + 保存文件到SD卡上
書架的實現
平時多線程用到哪些(區分兩種方法的特點)Handler
AsyncTask
Canvas畫圖用法
自定義控件使用(很經常問到)
Android應用程序生命周期(區分與Android組件的生命周期)被請求時實例化,系統內存不足被清理
Activity的啟動模式
Standard singleTop singleTask singleInstance 網絡7層模型 Tcp/ip(分別位于那一層)
應用層 表示層 會話層 傳輸層
網絡層 數據鏈路層 物理層
常用設計模式(非重點 能答更好)簡單工廠,抽象工廠方法,代理模式,…
華訊財經: 主要是簡歷上寫的項目
由于項目都從頭到尾敲的沒啥好講的屬于閑聊吹牛的公司。
支付寶面試過程(電面主要問j2ee):
Activity中onCreate(),onStart()方法都會執行為什么不合并為一個方法
Activity的onCreate()中啟動Service,那么onCreate()中的代碼與Service中onStart()方法中的代碼所在線程關系
耗時操作問題(主要考慮線程關系)
項目中的難點
完成??!
Android中MVC設計模式的理解
UI布局相關
一口氣說出有哪幾種布局(每種布局特點)對Http協議的理解 post/get特點 TCP/ip 多線程上傳下載
第三篇:android面試指南
1、activity的生命周期。
activity主要生命周期的方法說明:
1)onCreate(Bundle savedInstanceState):創建activity時調用。設置在該方法中,還以Bundle的形式提供對以前儲存的任何狀態的訪問!
2)onStart():activity變為在屏幕上對用戶可見時調用。
3)onResume():activity開始與用戶交互時調用(無論是啟動還是重新啟動一個活動,該方法總是被調用的)。
4)onPause():activity被暫?;蚴栈豤pu和其他資源時調用,該方法用于保存活動狀態的,也是保護現場,壓棧吧!
5)onStop():activity被停止并轉為不可見階段及后續的生命周期事件時調用。
6)onRestart():重新啟動activity時調用。該活動仍在棧中,而不是啟動新的活動。
7)onDestroy():activity被完全從系統內存中移除時調用,該方法被
2.橫豎屏切換時候activity的生命周期
3.android中的動畫有哪幾類,它們的特點和區別是什么
4.handler機制的原理
5.說說activity,intent,service是什么關系
6.android中線程與線程,進程與進程之間如何通信
7.widget相對位置的完成在antivity的哪個生命周期階段實現
8.說說mvc模式的原理,它在android中的運用
9.說說在android中有哪幾種數據存儲方式
10.android中有哪幾種解析xml的類,官方推薦哪種?以及它們的原理和區別 一,listview你是怎么優化的。
二,view的刷新,之前說過
三,IPC及原理
四,Android多線程
五,Android為什么要設計4大組件,他們之間的聯系,不設計行不行(主要是為了實現MVC模式,然而java中最難的模式也是這個,很少有產品能將這個模式做得很好【Technicolor的面試官問的這個】
六,service的周期,activity的周期,談下你對Android內部應用的了解,比如他做電話,以及聯系人等等應用??蚣軐佑泻芏鄸|西還是多看看,熟悉Android怎么做的,不管你做應用程開發還是應用框架層開發很有好處的。
在就是你項目經驗,突出你遇到什么難點,然后是怎么解決的!盡量將每個技術點凸顯出來,當然面試官有時候會為了體現你是否真正做過,他會問你,你在這個應用中做那個模塊,用了多少個類之類的問題。
偶爾有的面試官會問你,你用過Android自帶的單元測試了沒,怎么用的?當然我面試過很多家單位,有的是做平板,手機,數字電視,有的是做出 個erp之類的客戶端等等,出于前面的三個,基本上都是將Android的全部改掉,如果真正要做Android的話,大家要學的還很多。
總之,一句話,什么樣的面試官都有,去面試的時候要做好一切心理準備,不管是技術還是基礎都得扎實。一個人的交談能力也很重要,總之不是非常標準 的普通話,最起碼你說的得讓別人聽得懂,而且得把面試官講得非常徹底,這樣你獲得offer的機會更大,談工資也有優勢~~當然曾經一家公司的面試官跟我 說過,技術是不惜錢的,只要你有能力,多少錢他都請。_
確實,來北京求職期間,牛人真的很多,而且有的面試官也非常好,給了很多忠肯的意見。并不是每個面試官都特想為難你的~最主要的還是想知道你的技術,因為他們也是吃公司飯,得為這個負責。
Basic:
1.基本的UI控件和布局文件
2.UI配套的Adapter的使用
3.Activity, Intent,Service,broadCast Receiver他們的生命周期管理熟悉一下
4.操作手機上的數據庫SQLite應用
Advanced_1:
1.為什么看好 Android
2.現在在公司做哪些工作(關于 Android)
3.Android 的框架以及一些基礎知識
4.Android 一些方面的領悟(如Android框架的 IoC特性,View System 的狀態機機制等)
Advanced_2:
1.對多線程的運用和理解,及多線程之間handle的傳值。
2.對android 虛擬機的理解,包括內存管理機制垃圾回收機制。
3.framework工作方式及原理,Activity是如何生成一個view的,機制是什么。
4.android本身的一些限制,不如apk包大小限制,讀取大文件 時的時間限制。
5.Linux中跨進程通信的集中方式
Android_4:
1.dvm的進程和Linux的進程, 應用程序的進程是否為同一個概念
2.sim卡的EF 文件有何作用
3.AT命令的User case的概念
4.嵌入式操作系統內存管理有哪幾種,各有何特性
5.什么是嵌入式實時操作系統, Android 操作系統屬于實時操作系統嗎?
6.一條最長的短信息約占多少byte?
補充:
近期很多公司招聘Android程序員,就一些常見的Android面試基礎題做下總結,看看你能做出多少道?
1.Intent的幾種有關Activity啟動的方式有哪些,你了解每個含義嗎? 這里Android123提示大家,Intent的一些標記有
FLAG_ACTIVITY_BROUGHT_TO_FRONT、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET、FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS、FLAG_ACTIVITY_MULTIPLE_TASK和 FLAG_ACTIVITY_NEW_TASK 等。每種含義大家看SDK文檔和具體跑下這樣你的記憶會更深刻些。
2.Activity和Task的啟動模式有哪些? 每種含義是什么?
有關在AndroidManifest.xml中的android:launchMode定義,主要有standard、singleTop、singleTask和singleInstance,同時對于android:taskAffinity這些問題大家也要了解,Android開發網在 以前的文章中講過,不過很多開發者仍然不是很清楚,這些基礎問題我們以后仍然會再次總結。
3.通過Intent傳遞一些二進制數據的方法有哪些?
1).使用Serializable接口實現序列化,這是Java常用的方法。
2).實現Parcelable接口,這里Android的部分類比如Bitmap類就已經實現了,同時Parcelable在Android AIDL中交換數據也很常見的。
4.能說下Android應用的入口點嗎?
在Google的虛擬機中Application實例中已經實現了main方法,有關具體的Application介紹可以參考 Android程序的入口點是什么,不是Main()嗎
5.Java基礎問題,說說HashSet和HashTable的區別?
這個相信Java程序員都知道HashSet相對于HashMap就是不能存放重復的數據,對于HashTable來說,存放的數據不能出現key或value為null這樣的情況。
6.Java基礎問題,用Java的集合類寫下廣度優先搜索.這個屬于基礎數據結構問題,通過隊列處理一層一層,相對于深度優先的棧處理方式來說更實用一些。
7.Android都有哪些XML解析器,都熟練掌握嗎?
這里XmlPull、SAX和DOM相信做過Web開發的都已經滾瓜爛熟了。
8.SQLite支持事務嗎? 添加刪除如何提高性能?
SQLite作為輕量級的數據庫,比MySQL還小,但支持SQL語句查詢,提高性能可以考慮通過原始經過優化的SQL查詢語句方式處理。
9.Android Service和Binder、AIDL你都熟練嗎?
作為Android重要的后臺服務,這些每個Android開發者都應該掌握,這也算是和Java SE最大的不同了,具體的實例大家可以查看Android音樂播放器的源代碼Music.git中的,這里不再贅述。
10.你用過哪款Android手機,有哪些優點和不足,相對于iPhone或Symbian又有哪些優缺點?
把這個作為面試題也是考察下,可以大概了解到它對Android的了解程度,多移動開發的認識。
轉自:
第四篇:Android總結
Android四大組件:
Activity—表現屏幕界面
Service—后臺服務
BroadcastReceiver—實現廣播機制
ContentProvider—實現數據存儲
Intent類:用來啟動程序并傳遞信息的類
用于Activity、Receiver、Service之間進行交互的類,通過無參構造方法創建對象,增加其action、category、data、extra等屬性進行信息傳遞,并通過Activity中的startActivity(Intent intent)進行界面的跳轉;通過Context中的StartService(Intent intent)進行服務跳轉;通過Context中的registerReceive(Intent intent)對廣播進行注冊,并通過sendBroadcast()進行無序消息發送,或可以通過SendOrderedBroadcast()進行有序的消息發送。Handler類:
用來發送和處理消息,并配合主線程完成UI的更新;消息Message/Runnable傳遞通過MessageQueue(消息隊列,先進先出)進行傳遞,并通過Lopper進行接收,傳遞的消息可以為Message對象,也可以是Runnable對象;接收方法通過HandleMessage(Message msg)進行獲取。SharedPreferences類:
一般用于第一次登錄時的設置,或者是各個界面的一些小型格式設置,如字體等。是本地的小型共享數據庫,可以通過Context的靜態方法getSharedPreferences獲得其對象,對象內的值均為鍵值對進行儲存。通過SharedPreferences對象調用editor()獲取SharedPreferences.Editor對象,向共享數據庫中增加數據,putString(),并提交數據,commit();通過SharedPreferences對象獲取共享數據庫中的數據,getString()。
ViewPager:實現界面滑動的類;
通過設置OnPagerChangedListener設置ViewPager的監聽事件;
實現流程:
①布局文件中設置ViewPager控件;
②代碼中進行綁定控件;
③通過繼承PagerAdapter抽象類進行設置適配器,并傳遞數據源;
④適配器中實現兩個抽象方法,兩個重寫方法:getCount()—獲取滑動界面的數量,isViewFromObject()—判斷視圖是否是來自于Object文件中;重寫兩個方法,分別為destoryItem—銷毀指定位置的視圖;InstantiateItem(),設置指定位置的視圖;
Timer與TimerTask類:
Timer為計時器的類,通過無參構造方法可以獲取對象,通過Timer.schedule(TimerTask task,long time)進行設置多久后執行某任務,當任務執行完后,取消計時的功能,Timer.cancle();TimerTask類為抽象類,實例化時,必須重寫run方法;執行的內容,均在run方法中進行設置,并且執行時,已在子線程中進行執行。自定義View:用到的類有Paint、Canvas、Spec、SpecF、Path、View.MeasureSpec、Timer、TimerTask;
抽象類,通過子類繼承,獲取對象;在布局文件中綁定后,通過代碼,設置自定義View的屬性;自定義View中,通過重寫OnMeasure方法,對布局文件中的尺寸進行測量,并由View中的setMeasureDimenson()方法,進行數據的保存;通過重寫Ondraw方法,進行繪圖;當需要繪制動態圖形時,使用計時器Timer的schedule(TimerTask,long time,delay time2)方法,在time時間后,每隔time2時間,重寫執行run方法中的內容;將耗時的操作設置在run方法中,并通過View中的invalidate()方法刷新主線程中的繪的圖形,通過postInvalidate()刷新子線程中的圖形。數據庫:
常用的數據庫有Oracle,需要安裝和配置的大型收費數據庫;MySQL是中型數據庫,同樣需要安裝配置,但不需要收費;Sqlite是小型免費的嵌入式數據庫,占用內存低,最新版本為3.0。Sqlite數據庫需要通過SqliteDatabaseOpenHelper進行創建數據庫,并通過SqliteDatabase進行數據庫的操作。輔助類是抽象類,通過繼承,重寫兩個方法,并在子類的構造方法中通過OpenHelper的構造方法(Context context,String SqlName,SqliteDatabase.CursorFactory factory,int version)進行數據庫的創建,在onCreate方法中,進行數據庫表的創建,在onUpdate中進行數據庫的版本更新。在數據庫的操作類中,執行exect方法,通過sql語句對數據庫進行操作。Create table student(_id integer primary key auto increament ,name text);insert into student(_id,name)values(1,zx);delete from student where _id=1;update student set _id=2 where name=zx;select *from student;ListView、GridView適配器的優化:
將布局文件中的控件進行封裝,當視圖加載時,判斷可變視圖是否存在,當不存在時,通過布局文件獲取視圖,并新建封裝類,將地址通過setTag()進行發送;當視圖存在時,重復利用地址—getTag()。反射:
存儲數據的方式:
共享數據庫、數據庫、文件、網絡、內容提供者
廣播:
廣播傳播時,需要接收者、發送者、廣播頻道;根據發送者的發送方式不同,分為有序廣播、無序廣播;有序廣播為接收者有接收順序,根據設置的優先級不同,確定先后順序,接收者同時也是發送者,向后面的廣播發送消息,發送過程中,可以添加信息,也可以停止廣播的傳輸;無序廣播,接收者之間無聯系,均從發送者處接收信息;廣播在傳輸過程中,不能被添加信息,也不可能被停止。廣播在發送前,需要對接收者進行注冊,注冊方式有兩種,動態注冊、靜態注冊。動態注冊,是在代碼中進行,通過Context對象調用靜態方法進行注冊,所有的廣播均可以用動態注冊,其生命周期依賴于應用,相對于靜態注冊,比較節省內存;靜態方法在清單文件中進行注冊,部分系統廣播不能通過靜態注冊進行,其生命周期依賴于系統,當系統啟動,即運行接收廣播,較耗內存。廣播接收者需要繼承BroadcastReceiver,并實現抽象方法onReceive(),通過回調接口,進行數據的傳輸。注意:廣播發送前,必須進行接收者的注冊,并且,當顯示跳轉時,不需要意圖過濾器。安卓布局:九種布局
線性布局,水平或垂直方向兩種格式,主要特點為權重,即規定各控件在視圖中的占有的比例;
相對布局,相對于父控件或兄弟控件的布局,各控件需指定相對位置; 絕對布局,指定各控件在視圖中的絕對位置,幾乎不再使用; 表格布局,子布局放在行中,列由控件表示(TableRow); 幀布局:覆蓋前面布局的布局,一般用于暫停按鈕等; 風格布局:可以跨行、跨列的布局,占滿換行;
左右側滑:可以實現左右側滑,通過設置主菜單和二級菜單設置左右兩個菜單; 下拉刷新:設置下拉刷新、上拉加載的功能; 抽屜布局;
安卓版本及對應的API:
1.6—4;2—7;3—11;4—15;4.3—18;5—20;5.1—21;6—23;7—25; 安卓四層架構:
應用層:Java語言開發,主要從事App開發;
運行庫層:Java語言與C語言,View視圖、管理類等的開發; 架構層:C語言與Linux語言,各種框架、瀏覽器等; 內核層:Linux、C語言,開發各種驅動; 安卓四大組件:
Activity:界面,實現程序與用戶之間的交換,有自己的生命周期,七個生命周期;4種啟動模式 Service:
BroadcastReceive:三要素,發送者、接收者、發送頻道(Intent);類型:有序(接收有序,有數據傳送,可以攔截數據)、無序廣播(相對);注冊方式:靜態注冊,持久監聽,占用內存比較高生命周期跟隨系統,動態注冊(代碼中),所有廣播都可以動態注冊,部分系統廣播不能動態注冊,臨時監聽,占用內存較少,生命周期隨應用進行;
ContentProvide:不能存放數據,五種存放數據方式之一,特點為:①為數據的獲取等操作添加一個統一的接口②可以實現跨應用訪問數據;③可以實現Android中通訊錄、消息、音頻、視頻等的訪問或操作;通過ContentReceive進行數據的訪問,可以對數據進行增刪改查操作。
動畫: IO流: 序列化: AlertDialog:
Set實現類: 手機電量檢測:
自定義SurfaceView:
自定義View:三個構造方法的區別
Message:Handler.obtain/new/Message.obtain
HttpUriConnection訪問網絡
gride 異步任務 動畫
抽象類和接口 反射 克隆 序列化 側滑的實現 數據庫 Socket:
Gson解析
異步任務和子線程區別 WebView 版本更新 照片的圓角化
Collection與Collections Sql語句
MVP框架與MVC: TCP與UDP的區別: 一鍵分享的流程: Http協議的理解: 不使用框架訪問網絡: List集合與set集合: 自定義View的流程: 線性布局的特點: ViewPager的原理: 服務的啟動方式:
Activity的啟動方式: Xml數據解析:
第五篇:Android WebView總結
Android WebView總結
1、添加權限:AndroidManifest.xml中必須使用許可“Android.permission.INTERNET”,否則會出web page not available錯誤。
2、在要Activity中生成一個WebView組件:WebView webView = new WebView(this);
3、設置WebView基本信息:
如果訪問的頁面中有Javascript,則webview必須設置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true);
觸摸焦點起作用
requestFocus();
取消滾動條
this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
4、設置WevView要顯示的網頁:
互聯網用:webView.loadUrl("");本地文件存放在:assets文件中
5、如果希望點擊鏈接由自己處理,而不是新開Android的系統browser中響應該鏈接。給WebView添加一個事件監聽對象(WebViewClient)
并重寫其中的一些方法
shouldOverrideUrlLoading:對網頁中超鏈接按鈕的響應。
當按下某個連接時WebViewClient會調用這個方法,并傳遞參數:按下的url
onLoadResource
onPageStart
onPageFinish
onReceiveError
onReceivedHttpAuthRequest6、如果用webview點鏈接看了很多頁以后,如果不做任何處理,點擊系統“Back”鍵,整個瀏覽器會調用finish()而結束自身,如果希望瀏覽的網頁回退而不是退出瀏覽器,需要在當前Activity中處理并消費掉該Back事件。
覆蓋Activity類的onKeyDown(int keyCoder,KeyEvent event)方法。
public boolean onKeyDown(int keyCoder,KeyEvent event){
if(webView.canGoBack()&& keyCoder == KeyEvent.KEYCODE_BACK){
webview.goBack();//goBack()表示返回webView的上一頁面
return true;
}
return false;
}