1.請描述下Activity的生命周期
Activity的生命周期有:onCreate()顷链、onStart()目代、onRestart()、onResume()嗤练、onPause()榛了、onStop()、onDestory();
可見生命周期:從onStart()到onStop()
前臺生命周期:從onResume()到onPause()
2.請介紹下android的數(shù)據(jù)存儲方式
- SharedPreferences :基于想xml文件存儲煞抬,保存一些基本的配置信息霜大。
- SQLite:數(shù)據(jù)庫存儲
- ContentProvider
- 文件存儲
- 網(wǎng)絡(luò)存儲
3.如何退出Activity?如何退出已調(diào)用多個Activity的Application革答?
退出Activity可以調(diào)用finish()方法
退出已調(diào)用對個Activity的Application:
- 拋異常強制退出:
- 記錄打開的每個Activity战坤,在需要退出的時候,關(guān)閉每一個Activity
- 發(fā)送特定廣播残拐,每個Activity接收到后退出
- 遞歸退出(途茫。。溪食。)
4.android中的動畫有哪幾類囊卜?
兩類,一類是Tween動畫眠菇,一類是Frame動畫边败。
Tween動畫,這種實現(xiàn)方式可以使視圖組件移動捎废、放大笑窜、縮小以及產(chǎn)生透明度的變化;另一種Frame動畫登疗,傳統(tǒng)的動畫方式排截,通過順序播放排列好的圖片來實現(xiàn),類似電影辐益。
5.如果后臺的Activity由于某些原因被回收了断傲,如何在被系統(tǒng)回收之前保存當(dāng)前狀態(tài)?
重寫OnSaveInstanceState()方法智政,在此方法中保存需要保存的數(shù)據(jù)认罩,該方法將會在Activity被回收之前調(diào)用。通過重寫OnRestoreInstanceState()方法可以從中提取保存好的數(shù)據(jù)续捂。
6.什么情況下會導(dǎo)致Force Close垦垂?如何避免宦搬?
程序出現(xiàn)異常,比如NullPointer
避免:編寫程序時邏輯連貫劫拗,思維縝密
導(dǎo)致異常的信息是可以捕獲的间校,在LogCat中能看到異常信息
7.請介紹下android的五中常用布局
- FrameLayout:所有的東西依次放在左上角,會重疊
- LinearLayout:線性布局页慷,每一次linearlayout又分為垂直布局和水平布局
- AbsoluteLayout:用x憔足,y坐標來指定元素位置
- RelativeLayout:
- TableLayout:
8.請解釋下在單線程模型中,Message酒繁、Handler滓彰、Message Queen、Looper之間的關(guān)系
答:簡單的說欲逃,Handler獲取當(dāng)前線程中的looper對象找蜜,looper用來從存放Message的MessageQueue中取出Message,再有Handler進行Message的分發(fā)和處理.
Message Queue(消息隊列):用來存放通過Handler發(fā)布的消息稳析,通常附屬于某一個創(chuàng)建它的線程洗做,可以通過Looper.myQueue()得到當(dāng)前線程的消息隊列
Handler:可以發(fā)布或者處理一個消息或者操作一個Runnable,通過Handler發(fā)布消息彰居,消息將只會發(fā)送到與它關(guān)聯(lián)的消息隊列诚纸,然也只能處理該消息隊列中的消息
Looper:是Handler和消息隊列之間通訊橋梁,程序組件首先通過Handler把消息傳遞給Looper陈惰,Looper把消息放入隊列畦徘。Looper也把消息隊列里的消息廣播給所有的Handler,Handler接受到消息后調(diào)用handleMessage進行處理
Message:消息的類型抬闯,在Handler類中的handleMessage方法中得到單個的消息進行處理
在單線程模型下井辆,為了線程通信問題,Android設(shè)計了一個Message Queue(消息隊列)溶握, 線程間可以通過該Message Queue并結(jié)合Handler和Looper組件進行信息交換杯缺。下面將對它們進行分別介紹:
- Message
Message消息,理解為線程間交流的信息睡榆,處理數(shù)據(jù)后臺線程需要更新UI萍肆,則發(fā)送Message內(nèi)含一些數(shù)據(jù)給UI線程。 - Handler
Handler處理者胀屿,是Message的主要處理者塘揣,負責(zé)Message的發(fā)送,Message內(nèi)容的執(zhí)行處理宿崭。后臺線程就是通過傳進來的 Handler對象引用來sendMessage(Message)亲铡。而使用Handler,需要implement 該類的 handleMessage(Message)方法,它是處理這些Message的操作內(nèi)容奖蔓,例如Update UI琅摩。通常需要子類化Handler來實現(xiàn)handleMessage方法。 - Message Queue
Message Queue消息隊列锭硼,用來存放通過Handler發(fā)布的消息,按照先進先出執(zhí)行蜕劝。
每個message queue都會有一個對應(yīng)的Handler檀头。Handler會向message queue通過兩種方法發(fā)送消息:sendMessage或post。這兩種消息都會插在message queue隊尾并按先進先出執(zhí)行岖沛。但通過這兩種方法發(fā)送的消息執(zhí)行的方式略有不同:通過sendMessage發(fā)送的是一個message對象,會被 Handler的handleMessage()函數(shù)處理暑始;而通過post方法發(fā)送的是一個runnable對象,則會自己執(zhí)行婴削。 - Looper
Looper是每條線程里的Message Queue的管家廊镜。Android沒有Global的Message Queue,而Android會自動替主線程(UI線程)建立Message Queue唉俗,但在子線程里并沒有建立Message Queue嗤朴。所以調(diào)用Looper.getMainLooper()得到的主線程的Looper不為NULL,但調(diào)用Looper.myLooper() 得到當(dāng)前線程的Looper就有可能為NULL虫溜。對于子線程使用Looper雹姊,API Doc提供了正確的使用方法:這個Message機制的大概流程:- 在Looper.loop()方法運行開始后,循環(huán)地按照接收順序取出Message Queue里面的非NULL的Message衡楞。
- 一開始Message Queue里面的Message都是NULL的吱雏。當(dāng)Handler.sendMessage(Message)到Message Queue,該函數(shù)里面設(shè)置了那個Message對象的target屬性是當(dāng)前的Handler對象瘾境。隨后Looper取出了那個Message歧杏,則調(diào)用 該Message的target指向的Hander的dispatchMessage函數(shù)對Message進行處理。在dispatchMessage方法里迷守,如何處理Message則由用戶指定犬绒,三個判斷,優(yōu)先級從高到低:
- Message里面的Callback盒犹,一個實現(xiàn)了Runnable接口的對象懂更,其中run函數(shù)做處理工作;
- Handler里面的mCallback指向的一個實現(xiàn)了Callback接口的對象急膀,由其handleMessage進行處理沮协;
- 處理消息Handler對象對應(yīng)的類繼承并實現(xiàn)了其中handleMessage函數(shù),通過這個實現(xiàn)的handleMessage函數(shù)處理消息卓嫂。
由此可見慷暂,我們實現(xiàn)的handleMessage方法是優(yōu)先級最低的!
- Handler處理完該Message (update UI) 后,Looper則設(shè)置該Message為NULL行瑞,以便回收奸腺!
在網(wǎng)上有很多文章講述主線程和其他子線程如何交互,傳送信息血久,最終誰來執(zhí)行處理信息之類的突照,個人理解是最簡單的方法——判斷Handler對象里面的Looper對象是屬于哪條線程的,則由該線程來執(zhí)行氧吐! - 當(dāng)Handler對象的構(gòu)造函數(shù)的參數(shù)為空讹蘑,則為當(dāng)前所在線程的Looper;
- Looper.getMainLooper()得到的是主線程的Looper對象筑舅,Looper.myLooper()得到的是當(dāng)前線程的Looper對象座慰。
9.如何評價android系統(tǒng)的優(yōu)缺點?
優(yōu)勢:
- 開放性:
- 掙脫運營商的束縛
- 豐富的硬件選擇
- 不受任何限制的開發(fā)商
- 無縫結(jié)合的GooGle應(yīng)用
缺點:
- 安全和隱私
- 運營商仍能影響android機
- 同類型用戶減少
- 過分依賴開發(fā)商缺少標準配置
?