2017-07-17(two weeks passed)

1 Android activity生命周期

onCreate() ----- onStart() ----- onRestart() ----- onResume ----- onPause() ------ onStop() ----- onDestory()
onCreate(): 創(chuàng)建Activity時調(diào)用怀挠,設(shè)置在該方法中责静,還以Bundle的形式提供對以前存儲的任何狀態(tài)的訪問。
onStart(): Activity變?yōu)樵谄聊簧蠈τ脩艨梢姇r調(diào)用要销。
onResume(): Activity開始與用戶交互時調(diào)用(無論是啟動還是重新啟動一個活動吸占,該方法總是被調(diào)用蜂科。
onPause(): Activity被暫停或收回cpu和其他資源時調(diào)用浪感,該方法用戶保護(hù)活動狀態(tài)的缎罢,也是保護(hù)現(xiàn)場伊群。
onStop(): Activity被停止并轉(zhuǎn)為不可見階段及后續(xù)的生命周期事件時調(diào)用。
onRestart(): Activity被重新啟動時調(diào)用策精。該活動仍然在棧中舰始,而不是啟動新的Activity。
1咽袜、完整生命周期: 即從一個Activity從出現(xiàn)到消失丸卷,對應(yīng)的周期方法是從onCreate()到onDestroy()。
2询刹、可見生命周期: 當(dāng)Activity處于可以用戶看見的狀態(tài)谜嫉,但不一定能與用戶交互時,將多次執(zhí)行從onStart()到onStop()凹联。
3沐兰、前景生命周期: 當(dāng)Activity處于Activity棧最頂端,能夠與其他用戶進(jìn)行交互時蔽挠,將多次執(zhí)行從onResume()到onPause()-

2 Activity 跳轉(zhuǎn)時調(diào)用的生命周期

onCreate()//在Activity生命周期開始時調(diào)用住闯。
onRestoreInstanceState()//用來恢復(fù)UI狀態(tài)。
onRestart()//當(dāng)Activity重新啟動時調(diào)用。
onStart()//當(dāng)Activity對用戶即將可見時調(diào)用比原。
onResume()//當(dāng)Activity與用戶交互時插佛,繪制界面。
onSaveInstanceState()//即將移出棧頂保留UI狀態(tài)時調(diào)用量窘。
onPause()//暫停當(dāng)前活動Activity雇寇,提交持久數(shù)據(jù)的改變,停止動畫或其他占用GPU資源的東西蚌铜,由于下一個Activity在這個方法返回之前不會resume锨侯,所以這個方法的代碼執(zhí)行要快。
onStop()//Activity不再可見時調(diào)用厘线。
onDestroy()//Activity銷毀棧時被調(diào)用的最后一個方法

3 橫豎屏切換時Activity的生命周期

1识腿、不設(shè)置Activity的 android: configChanges時,切屏?xí)匦抡{(diào)用各個生命周期造壮,切橫屏?xí)r會執(zhí)行一次,切豎屏?xí)r會執(zhí)行兩次骂束。
2耳璧、設(shè)置Activity的android: configChanges=“orientation”時,切屏還是會重新調(diào)用各個生命周期展箱,切橫旨枯、豎屏?xí)r只會執(zhí)行一次。
3混驰、設(shè)置Activity的android: configChanges=“orientation|keyboardHidden”時攀隔,切屏不會重新調(diào)用各個生命周期,只會執(zhí)行onConfiguration方法

4 如何將一個Activity設(shè)置成窗口的樣式栖榨,style和theme的區(qū)別昆汹。

1.什么是Style及Theme?兩者有何區(qū)別
(1) Theme是針對窗體級別的,改變窗體樣式的婴栽,如窗口標(biāo)題满粗、邊框等。不能作用于單個View組件愚争,是對整個應(yīng)用的所有Activity或單個Activity起作用映皆。
(2) Style是針對窗體元素級別的,改變指定控件或者Layout的樣式
使用Style
(1)創(chuàng)建Style
(1) 在res\values\下創(chuàng)建styles.xml文件
(2)添加<resources>節(jié)點(根節(jié)點)
(3)添加自定義的style及其屬性
style的寫法通常為:
<style name="MyStyle" [parent="PARENT"]>
<item name="[ATTR]">[VALUE]</item>
</style>
其中,parent屬性為其父style的名字(可選),通過設(shè)置該值,可繼承其它style的屬性。當(dāng)我們需要對現(xiàn)有的style的屬性轰枝。當(dāng)我們需要對現(xiàn)有的style做微小的改變
(2)為控件指定Style
<EditText android:layout_height="wrap_content"
android:text="EditText"
style="@style/Title"
android:layout_width="fill_parent"
android:id="@+id/editText1"></EditText>
Theme的使用
1.在setContentView()方法之前設(shè)置Theme:setTheme(R.style.XXX);
2.在mainfest文件中加入Theme Theme就是Style
AndroidManifest.xml中:
<application android:theme="@android:style/theme">捅彻,
<activity android:theme="@android:style/theme">,
在R.attr定義中以window開頭的一些屬性只對theme有效鞍陨。
如果一個應(yīng)用使用了theme步淹,同時應(yīng)用下的view也使用了style,那么當(dāng)theme與樣式style發(fā)生沖突時,style的優(yōu)先級高于主題贤旷。

第一種方法:
在styles.xml文件中广料,可以新建如下的類似Dialog的style。<style name=“Theme.FloatActivity” parent=“android:style/Theme.Dialog”> </style>幼驶。
第二種方法:
在AndroidManifest.xml中在需要顯示為窗口的Activity中添加如下屬性: android: theme=“@style/Theme.FloatActivity”即可艾杏。也可以直接添加對應(yīng)需要展示為Dialog style的Activity的android: theme屬性為android: theme=“@ android: style/Theme.Dialog”

5 兩個Activity之間傳遞數(shù)據(jù)

可以在Intent對象中利用Extra來傳遞存儲數(shù)據(jù)。
在Intent的對象請求中盅藻,使用putExtra(“鍵值對的名字”购桑,”鍵值對的值”);在另外一個Activity中將Intent中的請求數(shù)據(jù)取出來:
Intent intent = getIntent();
String value = intent.getStringExtra(“testIntent”);

6 怎么讓在啟動一個Activity是就啟動一個service氏淑?

首先定義好一個service勃蜘,然后在Activity的onCreate里面進(jìn)行連接并bindservice或者直接startService。

7 Activity怎么和service綁定假残,怎么在activity中啟動自己對應(yīng)的service缭贡?

1、activity能進(jìn)行綁定得益于Serviece的接口辉懒。為了支持Service的綁定阳惹,實現(xiàn)onBind方法。
2眶俩、Service和Activity的連接可以用ServiceConnection來實現(xiàn)莹汤。需要實現(xiàn)一個新的ServiceConnection,重現(xiàn)onServiceConnected和OnServiceDisconnected方法颠印,一旦連接建立纲岭,就能得到Service實例的引用。
3线罕、執(zhí)行綁定止潮,調(diào)用bindService方法,傳入一個選擇了要綁定的Service的Intent(顯示或隱式)和一個你實現(xiàn)了的ServiceConnection的實例

8 什么是Service以及描述下它的生命周期闻坚。Service有哪些啟動方法沽翔,有什么區(qū)別,怎樣停用Service窿凤?

Android Service是運行在后臺的代碼仅偎,不能與用戶交互,可以運行在自己的進(jìn)程雳殊,也可以運行在其他應(yīng)用程序進(jìn)程的上下文里橘沥。需要通過某一個Activity或者Context對象來調(diào)用。Service有兩個啟動方法夯秃,分別是Context.startService()和Context.bindService()座咆。如果在Service執(zhí)行耗時的操作需要啟動一個新線程來執(zhí)行痢艺。
Android Service只繼承了onCreate(), onStart(),onDestroy()三個方法,當(dāng)我們第一次啟動Service時介陶,先后調(diào)用onCreate(), onStart()這兩個方法堤舒,當(dāng)停止Service時,則執(zhí)行onDestroy()方法時哺呜。如果Service已經(jīng)啟動了舌缤,當(dāng)我們再次啟動Service時,不會再執(zhí)行onCreate()方法某残,而是直接執(zhí)行onStart()方法国撵。

9 什么時候使用Service?

比如播放多媒體的時候玻墅,用戶啟動了其他Activity介牙,這個時候程序要在后臺繼續(xù)播放,比如檢測SD卡上文件的變化澳厢,再或者在后臺記錄你的地理信息位置的改變等等环础。

10 描述一下Intent 和 Intent Filter。

Intent在Android中被翻譯為”意圖”剩拢,他是三種應(yīng)用程序基本組件-Activity喳整,Service和broadcast receiver之間相互激活的手段。在調(diào)用Intent名稱時使用ComponentName也就是類的全名時為顯示調(diào)用裸扶。這種方式一般用于應(yīng)用程序的內(nèi)部調(diào)用,因為你不一定會知道別人寫的類的全名搬素。而Intent Filter是指意圖過濾呵晨,不出現(xiàn)在代碼中,而是出現(xiàn)在android Manifest文件中熬尺,以<intent-filter>的形式摸屠。(有一個例外是broadcast receiver的intentfilter是使用Context.registerReceiver()來動態(tài)設(shè)定的,其中intent filter也是在代碼中創(chuàng)建的)
一個intent有action粱哼,data季二,category等字段。一個隱式intent為了能夠被某個intent filter接收揭措,必須通過3個測試胯舷,一個intent為了被某個組件接收,則必須通過它所有的inte
nt filter中的一個绊含。

11 Intent傳遞數(shù)據(jù)時桑嘶,可以傳遞哪些類型數(shù)據(jù)?

intent間傳送數(shù)據(jù)一般有兩種常用的方法: 1躬充、extra 2逃顶、data讨便。
extra可以用Intent.putExtra放入數(shù)據(jù)。新啟動的Activity可用Intent.getExtras取出Bundle以政,然后用Bundles.getLong,getInt,getBoolean,getString等函數(shù)來取放進(jìn)去的值霸褒。
Data則是傳輸url。url可以是指我們熟悉的http盈蛮,ftp等網(wǎng)絡(luò)地址废菱,也可以指content來指向ContentProvider提供的資源。Intent.setData可以放入數(shù)據(jù)眉反,Intent.getData可以取出數(shù)據(jù)昙啄。

12 android 中有哪幾種解析xml的類?官方推薦哪種寸五?以及它們的原理和區(qū)別梳凛。

XML解析主要有三種方式,SAX梳杏、DOM韧拒、PULL。常規(guī)在PC上開發(fā)我們使用Dom相對輕松些十性,但一些性能敏感的數(shù)據(jù)庫或手機(jī)上還是主要采用SAX方式叛溢,SAX讀取是單向的,優(yōu)點:不占內(nèi)存空間劲适、解析屬性方便楷掉,但缺點就是對于套嵌多個分支來說處理不是很方便。而DOM方式會把整個XML文件加載到內(nèi)存中去霞势,這里Android開發(fā)網(wǎng)提醒大家該方法在查找方面可以和XPath很好的結(jié)合如果數(shù)據(jù)量不是很大推薦使用烹植,而PULL常常用在J2ME對于節(jié)點處理比較好,類似SAX方式愕贡,同樣很節(jié)省內(nèi)存草雕,在J2ME中我們經(jīng)常使用的KXML庫來解析。

13 如何啟用Service固以,如何停用Service墩虹。

服務(wù)的開發(fā)比較簡單,如下:
第一步:繼承Service類
public classSMSService extends Service {}
第二步:在AndroidManifest.xml文件中的<application>節(jié)點里對服務(wù)進(jìn)行配置:<service android:name=".SMSService" />
服務(wù)不能自己運行憨琳,需要通過調(diào)用Context.startService()或Context.bindService()方法啟動服務(wù)诫钓。這兩個方法都可以啟動Service,但是它們的使用場合有所不同栽渴。使用startService()方法啟用服務(wù)尖坤,調(diào)用者與服務(wù)之間沒有關(guān)連,即使調(diào)用者退出了闲擦,服務(wù)仍然運行慢味。使用bindService()方法啟用服務(wù)场梆,調(diào)用者與服務(wù)綁定在了一起,調(diào)用者一旦退出纯路,服務(wù)也就終止或油,大有“不求同時生,必須同時死”的特點驰唬。
如果打算采用Context.startService()方法啟動服務(wù)顶岸,在服務(wù)未被創(chuàng)建時,系統(tǒng)會先調(diào)用服務(wù)的onCreate()方法叫编,接著調(diào)用onStart()方法辖佣。如果調(diào)用startService()方法前服務(wù)已經(jīng)被創(chuàng)建,多次調(diào)用startService()方法并不會導(dǎo)致多次創(chuàng)建服務(wù)搓逾,但會導(dǎo)致多次調(diào)用onStart()方法卷谈。采用startService()方法啟動的服務(wù),只能調(diào)用Context.stopService()方法結(jié)束服務(wù)霞篡,服務(wù)結(jié)束時會調(diào)用onDestroy()方法世蔗。
如果打算采用Context.bindService()方法啟動服務(wù),在服務(wù)未被創(chuàng)建時朗兵,系統(tǒng)會先調(diào)用服務(wù)的onCreate()方法污淋,接著調(diào)用onBind()方法。這個時候調(diào)用者和服務(wù)綁定在一起余掖,調(diào)用者退出了寸爆,系統(tǒng)就會先調(diào)用服務(wù)的onUnbind()方法,接著調(diào)用onDestroy()方法盐欺。如果調(diào)用bindService()方法前服務(wù)已經(jīng)被綁定而昨,多次調(diào)用bindService()方法并不會導(dǎo)致多次創(chuàng)建服務(wù)及綁定(也就是說onCreate()和onBind()方法并不會被多次調(diào)用)。如果調(diào)用者希望與正在綁定的服務(wù)解除綁定找田,可以調(diào)用unbindService()方法,調(diào)用該方法也會導(dǎo)致系統(tǒng)調(diào)用服務(wù)的onUnbind()-->onDestroy()方法着憨。
Service常用生命周期回調(diào)方法如下:
onCreate() 該方法在服務(wù)被創(chuàng)建時調(diào)用墩衙,該方法只會被調(diào)用一次,無論調(diào)用多少次startService()或bindService()方法甲抖,服務(wù)也只被創(chuàng)建一次漆改。
onDestroy()該方法在服務(wù)被終止時調(diào)用。
與采用Context.startService()方法啟動服務(wù)有關(guān)的生命周期方法
onStart() 只有采用Context.startService()方法啟動服務(wù)時才會回調(diào)該方法准谚。該方法在服務(wù)開始運行時被調(diào)用挫剑。多次調(diào)用startService()方法盡管不會多次創(chuàng)建服務(wù),但onStart() 方法會被多次調(diào)用柱衔。
與采用Context.bindService()方法啟動服務(wù)有關(guān)的生命周期方法
onBind()只有采用Context.bindService()方法啟動服務(wù)時才會回調(diào)該方法樊破。該方法在調(diào)用者與服務(wù)綁定時被調(diào)用愉棱,當(dāng)調(diào)用者與服務(wù)已經(jīng)綁定,多次調(diào)用Context.bindService()方法并不會導(dǎo)致該方法被多次調(diào)用哲戚。
onUnbind()只有采用Context.bindService()方法啟動服務(wù)時才會回調(diào)該方法奔滑。該方法在調(diào)用者與服務(wù)解除綁定時被調(diào)用

14 final,finally,finalize的區(qū)別

final—修飾符(關(guān)鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類顺少,不能作為父類被繼承朋其。因此一個類不能既被聲明為 abstract的,又被聲明為final的脆炎。將變量或方法聲明為final梅猿,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值秒裕,而在以后的引用中只能讀取袱蚓,不可修改。被聲明為final的方法也同樣只能使用簇爆,不能重載癞松。
finally—再異常處理時提供 finally 塊來執(zhí)行任何清除操作。如果拋出一個異常入蛆,那么相匹配的 catch 子句就會執(zhí)行响蓉,然后控制就會進(jìn)入 finally 塊(如果有的話)。
finalize—方法名哨毁。Java技術(shù)允許使用 finalize() 方法在垃圾收集器將對象從內(nèi)存中清除出去之前做必要的清理工作枫甲。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調(diào)用的。它是在 Object 類中定義的扼褪,因此所有的類都繼承了它想幻。子類覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調(diào)用的话浇。

15 ANR是個什么玩意

ANR脏毯,是“Application Not Responding”的縮寫,即“應(yīng)用程序無響應(yīng)”幔崖。系統(tǒng)會向用戶顯示一個對話框食店,用戶可以選擇“等待”而讓程序繼續(xù)運行,也可以選擇“強(qiáng)制關(guān)閉”赏寇。
在Android中吉嫩,應(yīng)用程序的響應(yīng)是由Activity Manager和WindowManager系統(tǒng)服務(wù)監(jiān)視的 。當(dāng)它監(jiān)測到A嗅定、B自娩、C情況中的一個時,Android就會針對特定的應(yīng)用程序顯示ANR:
A.在5秒內(nèi)沒有響應(yīng)輸入的事件(例如渠退,按鍵按下忙迁,屏幕觸摸)--主要類型
B.BroadcastReceiver在10秒內(nèi)沒有執(zhí)行完畢
C.Service在特定時間內(nèi)(20秒內(nèi))無法處理完成--小概率類型
造成ABC的原因有很多脐彩,比如在主線程中做了非常耗時的操作,如下載动漾,io異常等丁屎。還需要注意的是產(chǎn)生這種ANR的前提是要有輸入事件,如果用戶沒有觸發(fā)任何輸入事件旱眯,即便是主線程阻塞了晨川,也不會產(chǎn)生ANR,因為InputDispatcher沒有分發(fā)事件給應(yīng)用程序删豺,當(dāng)然也不會檢測處理超時和報告ANR了共虑。
1.如何分析ANR
ANR發(fā)生時都會在log中輸出錯誤信息,從log中可以獲得ANR的類型呀页,CPU的使用情況妈拌,CPU使用率過高有可能是CPU饑餓導(dǎo)致了ANR。CPU使用率過低說明主線程被block了蓬蝶,如果IOwait高是因為主線程進(jìn)行I/O操作造成的尘分。
除了log輸出外,你會發(fā)現(xiàn)各個應(yīng)用進(jìn)程和系統(tǒng)進(jìn)程的函數(shù)堆棧信息都輸出到了一個/data/anr/traces.txt的文件中丸氛,這個文件是分析ANR原因的關(guān)鍵文件.要獲取到該文件可使用adb指令進(jìn)行賦權(quán)后拉出查看調(diào)用stack培愁。通過log、trace.text缓窜、代碼結(jié)合分析ANR的成因(iowait定续?Memoryleak?Block禾锤?)
2.怎么避免ANR
要避免問題的產(chǎn)生私股,就要抓住問題產(chǎn)生的原因(ABC三種):
(1)避免在主線程上進(jìn)行復(fù)雜耗時的操作,比如說發(fā)送接收網(wǎng)絡(luò)數(shù)據(jù)/進(jìn)行大量計算/操作數(shù)據(jù)庫/讀寫文件等恩掷。這個可以通過使用AsyncTask或者使用多線程來實現(xiàn)倡鲸。
(2)broadCastReceiver 要進(jìn)行復(fù)雜操作的的時候,可以在onReceive()方法中啟動一個Service來處理
(3)在設(shè)計及代碼編寫階段避免出現(xiàn)出現(xiàn)同步/死鎖或者錯誤處理不恰當(dāng)?shù)惹闆r黄娘。

16 接口和抽象類有什么區(qū)別

接口和抽象類的概念不一樣旦签。接口是對動作的抽象,抽象類是對根源的抽象寸宏。
抽象類表示的是,這個對象是什么偿曙。接口表示的是氮凝,這個對象能做什么。比如望忆,男人罩阵,女人竿秆,這兩個類(如果是類的話……),他們的抽象類是人稿壁。說明幽钢,他們都是人。
人可以吃東西傅是,狗也可以吃東西匪燕,你可以把“吃東西”定義成一個接口,然后讓這些類去實現(xiàn)它.
所以喧笔,在高級語言上帽驯,一個類只能繼承一個類(抽象類)(正如人不可能同時是生物和非生物),但是可以實現(xiàn)多個接口(吃飯接口书闸、走路接口)尼变。

17 wait()和sleep()的區(qū)別

1、 這兩個方法來自不同的類分別是浆劲,sleep來自Thread類嫌术,和wait來自O(shè)bject類。
sleep是Thread的靜態(tài)類方法牌借,誰調(diào)用的誰去睡覺度气,即使在a線程里調(diào)用b的sleep方法,實際上還是a去睡覺走哺,要讓b線程睡覺要在b的代碼中調(diào)用sleep蚯嫌。
2、 鎖: 最主要是sleep方法沒有釋放鎖丙躏,而wait方法釋放了鎖择示,使得其他線程可以使用同步控制塊或者方法。
sleep不出讓系統(tǒng)資源晒旅;wait是進(jìn)入線程等待池等待栅盲,出讓系統(tǒng)資源,其他線程可以占用CPU废恋。一般wait不會加時間限制谈秫,因為如果wait線程的運行資源不夠,再出來也沒用鱼鼓,要等待其他線程調(diào)用notify/notifyAll喚醒等待池中的所有線程拟烫,才會進(jìn)入就緒隊列等待OS分配系統(tǒng)資源。sleep(milliseconds)可以用時間指定使它自動喚醒過來迄本,如果時間不到只能調(diào)用interrupt()強(qiáng)行打斷硕淑。
Thread.sleep(0)的作用是“觸發(fā)立刻重新進(jìn)行一次CPU競爭”。
3、使用范圍:wait置媳,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用于樟,而sleep可以在任何地方使用。
synchronized(x){ x.notify() //或者wait() }

18 hashset()和treeset()區(qū)別

HashSet
HashSet有以下特點
1拇囊、 不能保證元素的排列順序迂曲,順序有可能發(fā)生變化
2、不是同步的
3寥袭、集合元素可以是null,但只能放入一個null
當(dāng)向HashSet集合中存入一個元素時路捧,HashSet會調(diào)用該對象的hashCode()方法來得到該對象的hashCode值,然后根據(jù) hashCode值來決定該對象在HashSet中存儲位置纠永。簡單的說鬓长,HashSet集合判斷兩個元素相等的標(biāo)準(zhǔn)是兩個對象通過equals方法比較相等,并且兩個對象的hashCode()方法返回值相 等
注意尝江,如果要把一個對象放入HashSet中涉波,重寫該對象對應(yīng)類的equals方法,也應(yīng)該重寫其hashCode()方法炭序。其規(guī)則是如果兩個對 象通過equals方法比較返回true時啤覆,其hashCode也應(yīng)該相同。另外惭聂,對象中用作equals比較標(biāo)準(zhǔn)的屬性窗声,都應(yīng)該用來計算 hashCode的值。

TreeSet類
TreeSet是SortedSet接口的唯一實現(xiàn)類辜纲,TreeSet可以確保集合元素處于排序狀態(tài)笨觅。TreeSet支持兩種排序方式,自然排序 和定制排序耕腾,其中自然排序為默認(rèn)的排序方式见剩。向TreeSet中加入的應(yīng)該是同一個類的對象。
TreeSet判斷兩個對象不相等的方式是兩個對象通過equals方法返回false扫俺,或者通過CompareTo方法比較沒有返回0
自然排序
自然排序使用要排序元素的CompareTo(Object obj)方法來比較元素之間大小關(guān)系苍苞,然后將元素按照升序排列。
Java提供了一個Comparable接口狼纬,該接口里定義了一個compareTo(Object obj)方法羹呵,該方法返回一個整數(shù)值,實現(xiàn)了該接口的對象就可以比較大小疗琉。
obj1.compareTo(obj2)方法如果返回0冈欢,則說明被比較的兩個對象相等,如果返回一個正數(shù)盈简,則表明obj1大于obj2凑耻,如果是 負(fù)數(shù)犯戏,則表明obj1小于obj2。
如果我們將兩個對象的equals方法總是返回true拳话,則這兩個對象的compareTo方法返回應(yīng)該返回0
定制排序
自然排序是根據(jù)集合元素的大小,以升序排列种吸,如果要定制排序弃衍,應(yīng)該使用Comparator接口,實現(xiàn) int compare(T o1,T o2)方法坚俗。
最重要:
1镜盯、TreeSet 是二差樹實現(xiàn)的,Treeset中的數(shù)據(jù)是自動排好序的,不允許放入null值猖败。
2速缆、HashSet 是哈希表實現(xiàn)的,HashSet中的數(shù)據(jù)是無序的,可以放入null恩闻,但只能放入一個null艺糜,兩者中的值都不能重復(fù),就如數(shù)據(jù)庫中唯一約束幢尚。
3破停、HashSet要求放入的對象必須實現(xiàn)HashCode()方法,放入的對象尉剩,是以hashcode碼作為標(biāo)識的真慢,而具有相同內(nèi)容的 String對象,hashcode是一樣理茎,所以放入的內(nèi)容不能重復(fù)黑界。但是同一個類的對象可以放入不同的實例 。

19 array皂林、arraylist 朗鸠、list區(qū)別

[] 是針對特定類型、固定長度的式撼。
List 是針對特定類型童社、任意長度的。
Array 是針對任意類型著隆、固定長度的扰楼。
ArrayList 是針對任意類型、任意長度的美浦。

20 public弦赖、protected、default浦辨、private作用域

java中修飾符 public protected 默認(rèn) (frinedly) private

訪問權(quán)限 作用域 當(dāng)前類 同一package 子孫類 其它package public true true true true
protected true true true false
friendly true true false false
private true false false false
注:protected對友元及子孫類有作用域蹬竖,在其它包的子孫類中需要用子類的對象來調(diào)用以protected修飾符修飾的方法和成員,不能用父類的對象來調(diào)用。friendly修飾符币厕,在java中部存在列另,只是表示友元可以調(diào)用,即同一個包下旦装。
以下范圍依次由嚴(yán)到寬:private :本類訪問页衙;default :表示默認(rèn),不僅本類訪問阴绢,而且是同包可見店乐。Protected:同包可見+不同包的子類可見Public :表示所有的地方均可見。

21 安卓view繪制機(jī)制和加載過程呻袭,寫出整個過程

基本分為measure眨八、layout、draw 過程

22 面向?qū)ο蟮娜齻€特征

1左电、封裝
2廉侧、繼承
3、多態(tài)

所謂封裝券腔,也就是把客觀事物封裝成抽象的類伏穆,并且類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對象操作,對不可信的進(jìn)行信息隱藏纷纫。封裝是面向?qū)ο蟮奶卣髦徽砩ǎ菍ο蠛皖惛拍畹闹饕匦浴?簡單的說,一個類就是一個封裝了數(shù)據(jù)以及操作這些數(shù)據(jù)的代碼的邏輯實體辱魁。在一個對象內(nèi)部烟瞧,某些代碼或某些數(shù)據(jù)可以是私有的,不能被外界訪問染簇。通過這種方式参滴,對象對內(nèi)部數(shù)據(jù)提供了不同級別的保護(hù),以防止程序中無關(guān)的部分意外的改變或錯誤的使用了對象的私有部分锻弓。

所謂繼承是指可以讓某個類型的對象獲得另一個類型的對象的屬性的方法砾赔。它支持按級分類的概念。繼承是指這樣一種能力:它可以使用現(xiàn)有類的所有功能青灼,并在無需重新編寫原來的類的情況下對這些功能進(jìn)行擴(kuò)展暴心。 通過繼承創(chuàng)建的新類稱為“子類”或“派生類”,被繼承的類稱為“基類”杂拨、“父類”或“超類”专普。繼承的過程,就是從一般到特殊的過程弹沽。要實現(xiàn)繼承檀夹,可以通過“繼承”(Inheritance)和“組合”(Composition)來實現(xiàn)筋粗。繼承概念的實現(xiàn)方式有二類:實現(xiàn)繼承與接口繼承。實現(xiàn)繼承是指直接使用基類的屬性和方法而無需額外編碼的能力炸渡;接口繼承是指僅使用屬性和方法的名稱娜亿、但是子類必須提供實現(xiàn)的能力;

所謂多態(tài)就是指一個類實例的相同方法在不同情形有不同表現(xiàn)形式蚌堵。多態(tài)機(jī)制使具有不同內(nèi)部結(jié)構(gòu)的對象可以共享相同的外部接口暇唾。這意味著,雖然針對不同對象的具體操作不同辰斋,但通過一個公共的類,它們(那些操作)可以通過相同的方式予以調(diào)用

23 Java多線程安全線程

保證線程安全的三個訣竅:1瘸味、不要跨線程訪問共享變量宫仗。2、使共享變量是final類型的旁仿。3藕夫、將共享變量的操作加上同步。

24 int和Integer區(qū)別

int是基本數(shù)據(jù)類型
Integer是其包裝類枯冈,注意是一個類毅贮。
一是為了在各種類型間轉(zhuǎn)化,通過各種方法的調(diào)用尘奏。否則 你無法直接通過變量轉(zhuǎn)化滩褥。
比如,現(xiàn)在int要轉(zhuǎn)為String
int a=0;
String result=Integer.toString(a);
在java中包裝類炫加,比較多的用途是用在于各種數(shù)據(jù)類型的轉(zhuǎn)化中瑰煎。

25 fragment生命周期

image.png

可以看到Fragment比Activity多了幾個額外的生命周期回調(diào)方法:
onAttach(Activity)
當(dāng)Fragment與Activity發(fā)生關(guān)聯(lián)時調(diào)用。
onCreateView(LayoutInflater, ViewGroup,Bundle)
創(chuàng)建該Fragment的視圖
onActivityCreated(Bundle)
當(dāng)Activity的onCreate方法返回時調(diào)用
onDestoryView()
與onCreateView想對應(yīng)俗孝,當(dāng)該Fragment的視圖被移除時調(diào)用
onDetach()
與onAttach相對應(yīng)酒甸,當(dāng)Fragment與Activity關(guān)聯(lián)被取消時調(diào)用
注意:除了onCreateView,其他的所有方法如果你重寫了赋铝,必須調(diào)用父類對于該方法的實現(xiàn)

26 View的生命周期

View 的關(guān)鍵生命周期為 [改變可見性] --> 構(gòu)造View --> onFinishInflate --> onAttachedToWindow --> onMeasure --> onSizeChanged --> onLayout --> onDraw --> onDetackedFromWindow

27 Activity異常銷毀狀態(tài)下的數(shù)據(jù)保存與恢復(fù)

在界面異常銷毀之前會先調(diào)用onSaveInstanceState保存數(shù)據(jù)插勤,這個方法一般是在onPause之后調(diào)用革骨,我們可以在這個地方保存當(dāng)前界面的數(shù)據(jù)和界面狀態(tài)。當(dāng)系統(tǒng)為我們重新創(chuàng)建Activity的時候苛蒲,系統(tǒng)會調(diào)用onCreate和onRestoreInstanceState講保存的數(shù)據(jù)返回給我們,我們從中取出保存的數(shù)據(jù)來為用戶恢復(fù)到崩潰前的界面臂外,這里有一點要注意的是喇颁,onCreate每個創(chuàng)建都會被調(diào)用,而onRestoreInstanceState只有在onSaveInstanceState調(diào)用之后的創(chuàng)建才會被調(diào)用橘霎,開發(fā)者可以根據(jù)需求自己權(quán)衡使用哪個方法來恢復(fù)數(shù)據(jù)。

28#

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姐叁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子外潜,更是在濱河造成了極大的恐慌,老刑警劉巖挠唆,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聋呢,死亡現(xiàn)場離奇詭異填硕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)峻仇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門俄讹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哆致,“玉大人,你說我怎么就攤上這事患膛√В” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵踪蹬,是天一觀的道長驹溃。 經(jīng)常有香客問我,道長延曙,這世上最難降的妖魔是什么豌鹤? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮枝缔,結(jié)果婚禮上布疙,老公的妹妹穿的比我還像新娘。我一直安慰自己愿卸,他們只是感情好灵临,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著趴荸,像睡著了一般儒溉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上发钝,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天顿涣,我揣著相機(jī)與錄音波闹,去河邊找鬼。 笑死涛碑,一個胖子當(dāng)著我的面吹牛精堕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蒲障,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼歹篓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了揉阎?” 一聲冷哼從身側(cè)響起庄撮,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎重窟,沒想到半個月后惧财,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡垮衷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年搀突,在試婚紗的時候發(fā)現(xiàn)自己被綠了熊泵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡徐许,死狀恐怖雌隅,靈堂內(nèi)的尸體忽然破棺而出缸沃,到底是詐尸還是另有隱情,我是刑警寧澤趾牧,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布翘单,位于F島的核電站蹦渣,受9級特大地震影響剂桥,放射性物質(zhì)發(fā)生泄漏属提。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一斟薇、第九天 我趴在偏房一處隱蔽的房頂上張望恕酸。 院中可真熱鬧,春花似錦袱箱、人聲如沸义矛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽前计。三九已至垃杖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間调俘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工苞冯, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留舅锄,地道東北人司忱。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓畴蹭,卻偏偏與公主長得像叨襟,于是被迫代替她去往敵國和親幔荒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容