1.Android四大組件以及作用说敏?鸥跟??
?? ? ? Activity:Activity是Android程序與用戶實(shí)現(xiàn)交互的窗口盔沫,是Android中最重要的一中医咨,它需要保存各界面的狀態(tài),做很多持久化的事情架诞。 ? ? ? ?
????????Service:運(yùn)行與后臺(tái)服務(wù)于Activity拟淮,定義好接受的Intent提供同步和異步的接口。? ?
? ????? Content Provider:? ?
? ????? BroadCast Receiver:
2.Android中常用的五中布局谴忧?惩歉??
? ??????FrameLayout: 框架布局? ? ? ? ? ? ? ? ?LinearLayout:線性布局 ? ? ????
????????AbsolueLayout:絕對(duì)布局? ? ? ? ? ? ? ? RelativeLayout:相對(duì)布局? ? ????
????????TableLayout:表格布局?
3.Android 中動(dòng)畫有哪幾類俏蛮?撑蚌??它們的特點(diǎn)和區(qū)別是什么搏屑?争涌??
? ? ?????兩類辣恋,一類是Tween動(dòng)畫亮垫、另一類是Frame動(dòng)畫。 ? ? ? ?
????????Tween動(dòng)畫伟骨,實(shí)現(xiàn)方式可以使視圖組件移動(dòng)饮潦、放大、縮小以及產(chǎn)生透明度的變化携狭。? ? ? ?
????????Frame動(dòng)畫继蜡,通過一定的順序來播放一組圖片,(如gif圖)。?
4.Android中Listview優(yōu)化方案稀并?厨剪?宪肖?
? ??????如果是自定義適配器,那么在getView方法中考慮傳進(jìn)來額參數(shù)contenView是否為null谬擦,如果不為null則直接使用罩句,盡量減少view的創(chuàng)建履磨。 ???????
?????????給contentView設(shè)置tag(setTag())联四,傳入viewHolaer對(duì)象凯肋,用于緩存要顯示的數(shù)據(jù),可以達(dá)到圖像數(shù)據(jù)的異步加載蝙场。? ? ? ?
????????如果Listview需要顯示的item比較多時(shí)凌停,就要考慮數(shù)據(jù)的分頁加載,根據(jù)需求去對(duì)應(yīng)加載數(shù)據(jù)李丰。?
5.ArrayList與LinkedList的區(qū)別和適用場景???
Arraylist:
????????優(yōu)點(diǎn):ArrayList是實(shí)現(xiàn)了基于動(dòng)態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),因?yàn)榈刂愤B續(xù),一旦數(shù)據(jù)存儲(chǔ)好了逼泣,查詢操作效率會(huì)比較高(在內(nèi)存里是連著放的)趴泌。
????????缺點(diǎn):因?yàn)榈刂愤B續(xù), ArrayList要移動(dòng)數(shù)據(jù),所以插入和刪除操作效率比較低拉庶。
LinkedList:
????????優(yōu)點(diǎn):LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu),地址是任意的嗜憔,所以在開辟內(nèi)存空間的時(shí)候不需要等一個(gè)連續(xù)的地址,對(duì)于新增和刪除操作add和remove氏仗,LinedList比較占優(yōu)勢(shì)吉捶。LinkedList 適用于要頭尾操作或插入指定位置的場景。
????????缺點(diǎn):因?yàn)長inkedList要移動(dòng)指針,所以查詢操作性能比較低皆尔。
適用場景分析: 當(dāng)需要對(duì)數(shù)據(jù)進(jìn)行對(duì)此訪問的情況下選用ArrayList呐舔,當(dāng)需要對(duì)數(shù)據(jù)進(jìn)行多次增加刪除修改時(shí)采用LinkedList。
6.View的繪制流程???
View的繪制流程:OnMeasure()——>OnLayout()——>OnDraw()
各步驟的主要工作:
OnMeasure():
????????測(cè)量視圖大小慷蠕。從頂層父View到子View遞歸調(diào)用measure方法珊拼,measure方法又回調(diào)OnMeasure。 OnLayout():
????????確定View位置流炕,進(jìn)行頁面布局澎现。從頂層父View向子View的遞歸調(diào)用view.layout方法的過程,即父View根據(jù)上一步measure子View所得到的布局大小和布局參數(shù)每辟,將子View放在合適的位置上剑辫。
OnDraw():
????????繪制視圖:ViewRoot創(chuàng)建一個(gè)Canvas對(duì)象,然后調(diào)用OnDraw()渠欺。六個(gè)步驟:①妹蔽、繪制視圖的背景;②、保存畫布的圖層(Layer)讹开;③盅视、繪制View的內(nèi)容;④旦万、繪制View子視圖闹击,如果沒有就不用;⑤成艘、還原圖層(Layer)赏半;⑥、繪制滾動(dòng)條淆两。
?7.activity的生命周期断箫??秋冰?
Activity生命周期方法主要有onCreate()仲义、onStart()、onResume()剑勾、onPause()埃撵、onStop()、onDestroy()和onRestart()方法虽另。
啟動(dòng)一個(gè)A Activity暂刘,分別執(zhí)行onCreate()、onStart()捂刺、onResume()方法谣拣。
從A Activity打開B Activity分別執(zhí)行A onPause()、B onCreate()族展、B onStart()森缠、B onResume()、A onStop()方法仪缸。
關(guān)閉B Activity辅鲸,分別執(zhí)行B onPause()、A onRestart()腹殿、A onStart()独悴、A onResume()、B onStop()锣尉、B onDestroy()方法刻炒。
橫豎屏切換A Activity,清單文件中不設(shè)置android:configChanges屬性時(shí)自沧,先銷毀onPause()坟奥、onStop()树瞭、onDestroy()再重新創(chuàng)建onCreate()、onStart()爱谁、onResume()方法晒喷,設(shè)置orientation|screenSize(一定要同時(shí)出現(xiàn))屬性值時(shí),不走生命周期方法访敌,只會(huì)執(zhí)行onConfigurationChanged()方法凉敲。
Activity之間的切換可以看出onPause()、onStop()這兩個(gè)方法比較特殊寺旺,切換的時(shí)候onPause()方法不要加入太多耗時(shí)操作否則會(huì)影響體驗(yàn)爷抓。
8.android的數(shù)據(jù)存儲(chǔ)?阻塑?蓝撇?
????????使用SharedPreferences存儲(chǔ)數(shù)據(jù);它是Android提供的用來存儲(chǔ)一些簡單配置信息的一種機(jī)制陈莽,采用了XML格式將數(shù)據(jù)存儲(chǔ)到設(shè)備中渤昌。只能在同一個(gè)包內(nèi)使用,不能在不同的包之間使用走搁。
????????文件存儲(chǔ)數(shù)據(jù)独柑;文件存儲(chǔ)方式是一種較常用的方法,在Android中讀取/寫入文件的方法朱盐,與Java中實(shí)現(xiàn)I/O的程序是完全一樣的群嗤,提供了openFileInput()和openFileOutput()方法來讀取設(shè)備上的文件菠隆。
????????SQLite數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù)兵琳;SQLite是Android所帶的一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)庫,它支持SQL語句骇径,它是一個(gè)輕量級(jí)的嵌入式數(shù)據(jù)庫躯肌。
????????使用ContentProvider存儲(chǔ)數(shù)據(jù);主要用于應(yīng)用程序之間進(jìn)行數(shù)據(jù)交換破衔,從而能夠讓其他的應(yīng)用保存或讀取此Content Provider的各種數(shù)據(jù)類型清女。
????????網(wǎng)絡(luò)存儲(chǔ)數(shù)據(jù);通過網(wǎng)絡(luò)上提供給我們的存儲(chǔ)空間來上傳(存儲(chǔ))和下載(獲取)我們存儲(chǔ)在網(wǎng)絡(luò)空間中的數(shù)據(jù)信息晰筛。
9.Activity啟動(dòng)模式嫡丙??读第?
????????standard:標(biāo)準(zhǔn)模式曙博,也是系統(tǒng)默認(rèn)的啟動(dòng)模式。假如 activity A 啟動(dòng)了 activity B 怜瞒, activity B 則會(huì)運(yùn)行在 activity A 所在的任務(wù)棧中父泳。而且每次啟動(dòng)一個(gè) Activity ,都會(huì)重新創(chuàng)建新的實(shí)例,不管這個(gè)實(shí)例在任務(wù)中是否已經(jīng)存在惠窄。
?????????singleTop:棧頂復(fù)用模式蒸眠。假如 activity A 啟動(dòng)了 activity B ,就會(huì)判斷 A 所在的任務(wù)棧棧頂是否是 B 的實(shí)例杆融。如果是楞卡,則不創(chuàng)建新的 activity B 實(shí)例而是直接引用這個(gè)棧頂實(shí)例,同時(shí) onNewIntent 方法會(huì)被回調(diào)擒贸,通過該方法的參數(shù)可以取得當(dāng)前請(qǐng)求的信息臀晃;如果不是,則創(chuàng)建新的 activity B 實(shí)例介劫。
????????singleTask:棧內(nèi)復(fù)用模式徽惋。在第一次啟動(dòng)這個(gè) Activity 時(shí),系統(tǒng)便會(huì)創(chuàng)建一個(gè)新的任務(wù)座韵,并且初始化 Activity 的實(shí)例险绘,放在新任務(wù)的底部。不過需要滿足一定條件的誉碴。那就是需要設(shè)置 taskAffinity 屬性宦棺。
????????singleInstance:單實(shí)例模式。這個(gè)是 singleTask 模式的加強(qiáng)版黔帕,它除了具有 singleTask 模式的所有特性外代咸,它還有一點(diǎn)獨(dú)特的特性,那就是此模式的 Activity 只能單獨(dú)地位于一個(gè)任務(wù)棧成黄,不與其他 Activity 共存于同一個(gè)任務(wù)棧呐芥。
10.廣播注冊(cè)?奋岁?思瘟?
????????首先寫一個(gè)類要繼承BroadCastReceiver
????????第一種:在清單文件中聲明,添加 第二種:使用代碼進(jìn)行注冊(cè)如:
<receive android :name ="BroadCastReceiverDemo">
? ? <intent-filter>
? ? ? ? <action android:name="android.provider.Telephony.SMS_RECEIVED">
? ? </intent-filter>
</receiver>
????????第二種:使用代碼進(jìn)行注冊(cè)如:
IntentFilter filter = new? ? IntentFilter("android.provider.Telephony.SMS_RECEIVED");
BroadCastReceiverDemo receiver = new BroadCastReceiver();
registerReceiver(receiver, filter);
????????兩種注冊(cè)類型的區(qū)別是:
第一種是常駐型廣播闻伶,也就是說當(dāng)應(yīng)用程序關(guān)閉后滨攻,如果有信息廣播來,程序也會(huì)被系統(tǒng)調(diào)用自動(dòng)運(yùn)行蓝翰。
第二種不是常駐廣播光绕,也就是說廣播跟隨程序的生命周期。?