Android 基礎(chǔ)知識1-10

1 如何導(dǎo)入外部數(shù)據(jù)庫

把原數(shù)據(jù)庫包括在項(xiàng)目源碼的 res/raw
android系統(tǒng)下數(shù)據(jù)庫應(yīng)該存放在 /data/data/com..(package name)/ 目錄下喉恋,所以我們需要做的是把已有的數(shù)據(jù)庫傳入那個目錄下.操作方法是用FileInputStream讀取原數(shù)據(jù)庫落蝙,再用FileOutputStream把讀取到的東西寫入到那個目錄.

2 本地廣播和全局廣播有什么差別

因廣播數(shù)據(jù)在本應(yīng)用范圍內(nèi)傳播衩茸,不用擔(dān)心隱私數(shù)據(jù)泄露的問題。 不用擔(dān)心別的應(yīng)用偽造廣播藐窄,造成安全隱患资昧。 相比在系統(tǒng)內(nèi)發(fā)送全局廣播,它更高效荆忍。

3 LaunchMode應(yīng)用場景

standard格带,創(chuàng)建一個新的Activity。
singleTop刹枉,棧頂不是該類型的Activity叽唱,創(chuàng)建一個新的Activity。否則微宝,onNewIntent棺亭。
singleTask,回退棧中沒有該類型的Activity蟋软,創(chuàng)建Activity镶摘,否則,onNewIntent+ClearTop钟鸵。
singleInstance钉稍,回退棧中,只有這一個Activity棺耍,沒有其他Activity贡未。

singleTop適合接收通知啟動的內(nèi)容顯示頁面。
例如蒙袍,某個新聞客戶端的新聞內(nèi)容頁面俊卤,如果收到10個新聞推送,每次都打開一個新聞內(nèi)容頁面是很煩人的害幅。

singleTask適合作為程序入口點(diǎn)消恍。
例如瀏覽器的主界面。不管從多少個應(yīng)用啟動瀏覽器以现,只會啟動主界面一次狠怨,其余情況都會走onNewIntent,并且會清空主界面上面的其他頁面邑遏。

singleInstance應(yīng)用場景:
鬧鈴的響鈴界面佣赖。 你以前設(shè)置了一個鬧鈴:上午6點(diǎn)。在上午5點(diǎn)58分记盒,你啟動了鬧鈴設(shè)置界面憎蛤,并按 Home 鍵回桌面;在上午5點(diǎn)59分時,你在微信和朋友聊天;在6點(diǎn)時,鬧鈴響了世舰,并且彈出了一個對話框形式的 Activity(名為 AlarmAlertActivity) 提示你到6點(diǎn)了(這個 Activity 就是以 SingleInstance 加載模式打開的)底洗,你按返回鍵,回到的是微信的聊天界面,這是因?yàn)?AlarmAlertActivity 所在的 Task 的棧只有他一個元素, 因此退出之后這個 Task 的棧空了灵奖。如果是以 SingleTask 打開 AlarmAlertActivity,那么當(dāng)鬧鈴響了的時候估盘,按返回鍵應(yīng)該進(jìn)入鬧鈴設(shè)置界面瓷患。

4 Android事件傳遞流程:

事件都是從Activity.dispatchTouchEvent()開始傳遞
事件由父View傳遞給子View,ViewGroup可以通過onInterceptTouchEvent()方法對事件攔截遣妥,停止其向子view傳遞
如果事件從上往下傳遞過程中一直沒有被停止擅编,且最底層子View沒有消費(fèi)事件,事件會反向往上傳遞箫踩,這時父View(ViewGroup)可以進(jìn)行消費(fèi)爱态,如果還是沒有被消費(fèi)的話,最后會到Activity的onTouchEvent()函數(shù)境钟。
如果View沒有對ACTION_DOWN進(jìn)行消費(fèi)锦担,之后的其他事件不會傳遞過來,也就是說ACTION_DOWN必須返回true慨削,之后的事件才會傳遞進(jìn)來
OnTouchListener優(yōu)先于onTouchEvent()對事件進(jìn)行消費(fèi)

5 ANR對話框

應(yīng)用在5秒內(nèi)未響應(yīng)用戶的輸入事件(如按鍵或者觸摸)
BroadcastReceiver未在10秒內(nèi)完成相關(guān)的處理
Service在特定的時間內(nèi)無法處理完成 20秒

可以使用一下方法
使用AsyncTask處理耗時IO操作洞渔。
使用Thread或者HandlerThread時,調(diào)用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)設(shè)置優(yōu)先級缚态,否則仍然會降低程序響應(yīng)磁椒,因?yàn)槟J(rèn)Thread的優(yōu)先級和主線程相同。
使用Handler處理工作線程結(jié)果玫芦,而不是使用Thread.wait()或者Thread.sleep()來阻塞主線程浆熔。
Activity的onCreate和onResume回調(diào)中盡量避免耗時的代碼
BroadcastReceiver中onReceive代碼也要盡量減少耗時,建議使用IntentService處理

6 Requestlayout,onlayout,onDraw,DrawChild

requestLayout()方法 :會導(dǎo)致調(diào)用measure()過程 和 layout()過程 桥帆。 將會根據(jù)標(biāo)志位判斷是否需要ondraw
onLayout()方法(如果該View是ViewGroup對象医增,需要實(shí)現(xiàn)該方法,對每個子視圖進(jìn)行布局)
調(diào)用onDraw()方法繪制視圖本身 (每個View都需要重載該方法老虫,ViewGroup不需要實(shí)現(xiàn)該方法)
drawChild()去重新回調(diào)每個子視圖的draw()方法

7 Handler

1 當(dāng)Android程序第一次創(chuàng)建的時候叶骨,在主線程同時會創(chuàng)建一個Looper對象。Looper實(shí)現(xiàn)了一個簡單的消息隊(duì)列张遭,一個接著一個處理Message對象。程序框架所有主要的事件(例如:屏幕上的點(diǎn)擊時間地梨,Activity生命周期的方法等等)都包含在Message對象中菊卷,然后添加到Looper的消息隊(duì)列中缔恳,一個一個處理。主線程的Looper存在整個應(yīng)用程序的生命周期內(nèi)洁闰。
2 當(dāng)一個Handler對象在主線程中創(chuàng)建的時候歉甚,它會關(guān)聯(lián)到Looper的 message queue 。Message添加到消息隊(duì)列中的時候Message會持有當(dāng)前Handler引用扑眉,當(dāng)Looper處理到當(dāng)前消息的時候纸泄,會調(diào)用Handler#handleMessage(Message).
3 在java中,no-static的內(nèi)部類會 隱式的 持有當(dāng)前類的一個引用腰素。static的類則沒有聘裁。

8 onSaveInstanceState,onRestoreInstanceState

Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它們不同于 onCreate()弓千、onPause()等生命周期方法衡便,它們并不一定會被觸發(fā)。當(dāng)應(yīng)用遇到意外情況(如:內(nèi)存不足洋访、用戶直接按Home鍵)由系統(tǒng)銷毀一個Activity镣陕,onSaveInstanceState() 會被調(diào)用。但是當(dāng)用戶主動去銷毀一個Activity時姻政,例如在應(yīng)用中按返回鍵呆抑,onSaveInstanceState()就不會被調(diào)用。除非該activity是被用戶主動銷毀的汁展,通常onSaveInstanceState()只適合用于保存一些臨時性的狀態(tài)鹊碍,而onPause()適合用于數(shù)據(jù)的持久化保存。

9 OOM

Out Of Merrory善镰,Android系統(tǒng)的每一個應(yīng)用程序都設(shè)置一個硬性的Dalvik Heap Size最大限制閾值妹萨,如果申請的內(nèi)存資源超過這個限制,系統(tǒng)就會拋出OOM錯誤

內(nèi)存泄漏炫欺,阻止對象回收:
類的靜態(tài)變量持有大數(shù)據(jù)對象
非靜態(tài)內(nèi)部類存在靜態(tài)實(shí)例
資源對象未關(guān)閉
Handler內(nèi)存泄漏

解決方法:
使用更加輕量的數(shù)據(jù)結(jié)構(gòu) 例如乎完,我們可以考慮使用ArrayMap/SparseArray而不是HashMap等傳統(tǒng)數(shù)據(jù)結(jié)構(gòu)
避免在Android里面使用Enum
減小Bitmap對象的內(nèi)存占用,Bitmap對象的復(fù)用
使用更小的圖片
StringBuilder 在有些時候品洛,代碼中會需要使用到大量的字符串拼接的操作树姨,這種時候有必要考慮使用StringBuilder來替代頻繁的“+”。
避免在onDraw方法里面執(zhí)行對象的創(chuàng)建

10 Asynctask

內(nèi)存泄露: 非靜態(tài)內(nèi)部類AsynTask會隱式地持有外部類的引用桥状,如果其生命周期大于外部activity的生命周期帽揪,就會出現(xiàn)內(nèi)存泄漏
注意要復(fù)寫AsynTask的onCancel方法,把里面的socket辅斟,file等转晰,該關(guān)掉的要及時關(guān)掉
在 Activity 的onDestory()方法中調(diào)用Asyntask.cancal方法
Asyntask內(nèi)部使用弱引用的方式來持有Activity

若Activity已經(jīng)銷毀,此時AsynTask執(zhí)行完并且返回結(jié)果,會報(bào)異常嗎?
當(dāng)一個App旋轉(zhuǎn)時查邢,整個Activity會被銷毀和重建蔗崎。當(dāng)Activity重啟時,AsyncTask中對該Activity的引用是無效的扰藕,因此onPostExecute()就不會起作用缓苛,若AsynTask正在執(zhí)行,折會報(bào) view not attached to window manager 異常
同樣也是生命周期的問題邓深,在 Activity 的onDestory()方法中調(diào)用Asyntask.cancal方法未桥,讓二者的生命周期同步

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市芥备,隨后出現(xiàn)的幾起案子冬耿,更是在濱河造成了極大的恐慌,老刑警劉巖门躯,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淆党,死亡現(xiàn)場離奇詭異,居然都是意外死亡讶凉,警方通過查閱死者的電腦和手機(jī)染乌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來懂讯,“玉大人荷憋,你說我怎么就攤上這事『滞” “怎么了勒庄?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瘫里。 經(jīng)常有香客問我实蔽,道長,這世上最難降的妖魔是什么谨读? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任局装,我火速辦了婚禮,結(jié)果婚禮上劳殖,老公的妹妹穿的比我還像新娘铐尚。我一直安慰自己,他們只是感情好哆姻,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布宣增。 她就那樣靜靜地躺著,像睡著了一般矛缨。 火紅的嫁衣襯著肌膚如雪爹脾。 梳的紋絲不亂的頭發(fā)上帖旨,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機(jī)與錄音灵妨,去河邊找鬼碉就。 笑死,一個胖子當(dāng)著我的面吹牛闷串,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播筋量,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼烹吵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了桨武?” 一聲冷哼從身側(cè)響起肋拔,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎呀酸,沒想到半個月后凉蜂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡性誉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年窿吩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片错览。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡纫雁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出倾哺,到底是詐尸還是另有隱情轧邪,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布羞海,位于F島的核電站忌愚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏却邓。R本人自食惡果不足惜硕糊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望申尤。 院中可真熱鬧癌幕,春花似錦、人聲如沸昧穿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽时鸵。三九已至胶逢,卻和暖如春厅瞎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背初坠。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工和簸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碟刺。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓锁保,卻偏偏與公主長得像,于是被迫代替她去往敵國和親半沽。 傳聞我的和親對象是個殘疾皇子爽柒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

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

  • Activity與Fragment的生命周期 Activity: Activity生命周期須知:(1)onStar...
    關(guān)瑋琳linSir閱讀 1,428評論 0 8
  • 面試必背 會舍棄、總結(jié)概括——根據(jù)我這些年面試和看面試題搜集過來的知識點(diǎn)匯總而來 建議根據(jù)我的寫的面試應(yīng)對思路中的...
    luoyangzk閱讀 6,745評論 6 173
  • 兒童節(jié)快樂者填! 修這種妝面的片子浩村,真的是很費(fèi)時間呢,不過修完后成就感杠杠滴占哟! 皮膚的質(zhì)感與瑕疵心墅,毛孔自然逼真的修飾、...
    紅studio宋紅志閱讀 192評論 0 1
  • 第一次學(xué)習(xí)靜物擺拍榨乎,真實(shí)的體會到了道路的重要性怎燥。 道具: 主體:格子布(以前的裙子,廢物利用) 重點(diǎn):鮮花+干花+...
    sun396閱讀 164評論 3 2
  • 從明天起蜜暑,做一個幸福的人 喂馬刺覆、劈柴,周游世界 從明天起史煎,關(guān)心糧食和蔬菜 我有一所房子谦屑,面朝大海,春暖花開 從明天...
    Coleman丶閱讀 134評論 0 0