Android小知識(shí)點(diǎn)收集

  1. Android應(yīng)用程序消息處理機(jī)制(Looper测垛、Handler)分析

Android應(yīng)用程序是通過(guò)消息來(lái)驅(qū)動(dòng)的,系統(tǒng)為每一個(gè)應(yīng)用程序維護(hù)一個(gè)消息隊(duì)例却汉,應(yīng)用程序的主線(xiàn)程不斷地從這個(gè)消息隊(duì)例中獲取消息(Looper)驯妄,然后對(duì)這些消息進(jìn)行處理(Handler),這樣就實(shí)現(xiàn)了通過(guò)消息來(lái)驅(qū)動(dòng)應(yīng)用程序的執(zhí)行合砂,本文將詳細(xì)分析Android應(yīng)用程序的消息處理機(jī)制青扔。

2.Android系統(tǒng)進(jìn)程間通信Binder機(jī)制在應(yīng)用程序框架層的Java接口源代碼分析

在應(yīng)用程序中,我們都是把Server實(shí)現(xiàn)為Service的形式,并且通過(guò)IServiceManager.addService接口來(lái)把這個(gè)Service添加到Service Manager微猖,Client也是通過(guò)IServiceManager.getService接口來(lái)獲得Service接口谈息,接著就可以使用這個(gè)Service提供的功能了,這個(gè)與運(yùn)行時(shí)庫(kù)的Binder接口是一致的凛剥。

3.Android實(shí)現(xiàn)雙進(jìn)程守護(hù)(通過(guò)jni實(shí)現(xiàn))

做過(guò)android開(kāi)發(fā)的人應(yīng)該都知道應(yīng)用會(huì)在系統(tǒng)資源匱乏的情況下被系統(tǒng)殺死侠仇!當(dāng)后臺(tái)的應(yīng)用被系統(tǒng)回收之后,如何重新恢復(fù)它呢犁珠?

4.守護(hù)線(xiàn)程

import java.io.IOException;  
/*  
* 守護(hù)線(xiàn)程在沒(méi)有用戶(hù)線(xiàn)程可服務(wù)時(shí)自動(dòng)離開(kāi) 
* 在Java中比較特殊的線(xiàn)程是被稱(chēng)為守護(hù)(Daemon)線(xiàn)程的低級(jí)別線(xiàn)程逻炊。 
* 這個(gè)線(xiàn)程具有最低的優(yōu)先級(jí),用于為系統(tǒng)中的其它對(duì)象和線(xiàn)程提供服務(wù)犁享。 
* 將一個(gè)用戶(hù)線(xiàn)程設(shè)置為守護(hù)線(xiàn)程的方式是在線(xiàn)程對(duì)象創(chuàng)建之前調(diào)用線(xiàn)程對(duì)象的setDaemon方法余素。 
* 典型的守護(hù)線(xiàn)程例子是JVM中的系統(tǒng)資源自動(dòng)回收線(xiàn)程, 
* 我們所熟悉的Java垃圾回收線(xiàn)程就是一個(gè)典型的守護(hù)線(xiàn)程炊昆, 
* 當(dāng)我們的程序中不再有任何運(yùn)行中的Thread溺森, 
* 程序就不會(huì)再產(chǎn)生垃圾,垃圾回收器也就無(wú)事可做窑眯, 
* 所以當(dāng)垃圾回收線(xiàn)程是Java虛擬機(jī)上僅剩的線(xiàn)程時(shí)屏积,Java虛擬機(jī)會(huì)自動(dòng)離開(kāi)。  
* 它始終在低級(jí)別的狀態(tài)中運(yùn)行磅甩,用于實(shí)時(shí)監(jiān)控和管理系統(tǒng)中的可回收資源炊林。 
* 守護(hù)進(jìn)程(Daemon)是運(yùn)行在后臺(tái)的一種特殊進(jìn)程。它獨(dú)立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件卷要。 
* 也就是說(shuō)守護(hù)線(xiàn)程不依賴(lài)于終端渣聚,但是依賴(lài)于系統(tǒng),與系統(tǒng)“同生共死”僧叉。 
* 那Java的守護(hù)線(xiàn)程是什么樣子的呢奕枝。 
* 當(dāng)JVM中所有的線(xiàn)程都是守護(hù)線(xiàn)程的時(shí)候,JVM就可以退出了瓶堕; 
* 如果還有一個(gè)或以上的非守護(hù)線(xiàn)程則JVM不會(huì)退出隘道。  
*/  
public class testThread extends Thread {  
      
    public testThread() {  
    }  
    /** *//** 
     * 線(xiàn)程的run方法谭梗,它將和其他線(xiàn)程同時(shí)運(yùn)行 
     */  
    public void run(){  
        for(int i = 1; i <= 100; i++){  
            try{  
                Thread.sleep(100);  
                  
            } catch (InterruptedException ex){  
                ex.printStackTrace();  
            }  
            System.out.println(i);  
        }  
    }  
    public static void main(String [] args){  
    testThread test = new testThread();  
        test.setDaemon(true);  
        test.start();  
        System.out.println("isDaemon = " + test.isDaemon());  
        try {  
            System.in.read(); // 接受輸入激捏,使程序在此停頓,一旦接收到用戶(hù)輸入远舅,main線(xiàn)程結(jié)束闰蛔,守護(hù)線(xiàn)程自動(dòng)結(jié)束  
        } catch (IOException ex) {  
            ex.printStackTrace();  
        }  
    }  
}

關(guān)于用戶(hù)線(xiàn)程和守護(hù)線(xiàn)程:在Java中有兩類(lèi)線(xiàn)程:User Thread(用戶(hù)線(xiàn)程)、Daemon Thread(守護(hù)線(xiàn)程) Daemon的作用是為其他線(xiàn)程的運(yùn)行提供便利服務(wù)图柏,比如垃圾回收線(xiàn)程就是一個(gè)很稱(chēng)職的守護(hù)者爆办。User和Daemon兩者幾乎沒(méi)有區(qū)別,唯一的不同之處就在于虛擬機(jī)的離開(kāi):如果 User Thread已經(jīng)全部退出運(yùn)行了暮刃,只剩下Daemon Thread存在了背犯,虛擬機(jī)也就退出了漠魏。 因?yàn)闆](méi)有了被守護(hù)者,Daemon也就沒(méi)有工作可做了禁熏,也就沒(méi)有繼續(xù)運(yùn)行程序的必要了。 收起**

5.Android Service與Thread的應(yīng)用場(chǎng)景

Android中應(yīng)該使用Service而不應(yīng)該使用線(xiàn)程瘸爽,Android中有提供后臺(tái)運(yùn)行的組件,叫Service檀训。servie是系統(tǒng)的組件荧琼,它由系統(tǒng)進(jìn)程托管(servicemanager)偏化;它們之間的通信類(lèi)似于client和server脐恩,是一種輕量級(jí)的ipc通信,這種通信的載體是binder侦讨,它是在linux層交換信息的一種ipc驶冒。而thread是由本應(yīng)用程序托管。Thread:Thread 是程序執(zhí)行的最小單元韵卤,它是分配CPU的基本單位骗污。可以用 Thread 來(lái)執(zhí)行一些異步的操作沈条。Service:Service 是android的一種機(jī)制需忿,當(dāng)它運(yùn)行的時(shí)候如果是Local Service,那么對(duì)應(yīng)的Service 是運(yùn)行在主進(jìn)程的 main 線(xiàn)程上的拍鲤。如:onCreate贴谎,onStart 這些函數(shù)在被系統(tǒng)調(diào)用的時(shí)候都是在主進(jìn)程的 main 線(xiàn)程上運(yùn)行的。如果是Remote Service季稳,那么對(duì)應(yīng)的 Service 則是運(yùn)行在獨(dú)立進(jìn)程的 main 線(xiàn)程上擅这。

6.Intent標(biāo)志FLAG_ACTIVITY_NEW_TASK的解釋
Android Intent.FLAG_NEW_TASK詳解,包括其他的標(biāo)記的一些解釋

當(dāng)使用這個(gè)標(biāo)志時(shí)景鼠,如果一個(gè)包含此activity的task已經(jīng)運(yùn)行了仲翎,新的activity不會(huì)啟動(dòng);同時(shí)铛漓,當(dāng)前的task將簡(jiǎn)單的被提到窗口最前面溯香。查看FLAG_ACTIVITY_MULTIPLE_TASK可以禁止這個(gè)行為。
這個(gè)標(biāo)志不能用在調(diào)用者需要正在登陸的activity返回一個(gè)結(jié)果的情況浓恶。

7.Activity的四種launchMode
Activity一共有以下四種launchMode:
1.standard
2.singleTop
3.singleTask
4.singleInstance

8.Java中的static關(guān)鍵字解析
static方法就是沒(méi)有this的方法玫坛。在static方法內(nèi)部不能調(diào)用非靜態(tài)方法,反過(guò)來(lái)是可以的包晰。而且可以在沒(méi)有創(chuàng)建任何對(duì)象的前提下湿镀,僅僅通過(guò)類(lèi)本身來(lái)調(diào)用static方法炕吸。這實(shí)際上正是static方法的主要用途。
static關(guān)鍵字還有一個(gè)比較關(guān)鍵的作用就是 用來(lái)形成靜態(tài)代碼塊以?xún)?yōu)化程序性能勉痴。static塊可以置于類(lèi)中的任何地方赫模,類(lèi)中可以有多個(gè)static塊。在類(lèi)初次被加載的時(shí)候蒸矛,會(huì)按照static塊的順序來(lái)執(zhí)行每個(gè)static塊瀑罗,并且只會(huì)執(zhí)行一次。
為什么說(shuō)static塊可以用來(lái)優(yōu)化程序性能雏掠,是因?yàn)樗奶匦?只會(huì)在類(lèi)加載的時(shí)候執(zhí)行一次斩祭。因此,很多時(shí)候會(huì)將一些只需要進(jìn)行一次的初始化操作都放在static代碼塊中進(jìn)行磁玉。

9.淺析Java中的final關(guān)鍵字
在Java中停忿,final關(guān)鍵字可以用來(lái)修飾類(lèi)驾讲、方法和變量(包括成員變量和局部變量)蚊伞。

10.Java內(nèi)部類(lèi)詳解
為什么在Java中需要內(nèi)部類(lèi)?總結(jié)一下主要有以下四點(diǎn):
  a.每個(gè)內(nèi)部類(lèi)都能獨(dú)立的繼承一個(gè)接口的實(shí)現(xiàn)吮铭,所以無(wú)論外部類(lèi)是否已經(jīng)繼承了某個(gè)(接口的)實(shí)現(xiàn)时迫,對(duì)于內(nèi)部類(lèi)都沒(méi)有影響。內(nèi)部類(lèi)使得多繼承的解決方案變得完整谓晌,
  b.方便將存在一定邏輯關(guān)系的類(lèi)組織在一起掠拳,又可以對(duì)外界隱藏。
  c.方便編寫(xiě)事件驅(qū)動(dòng)程序
  d.方便編寫(xiě)線(xiàn)程代碼
最重要的原因之一纸肉,內(nèi)部類(lèi)的存在使得Java的多繼承機(jī)制變得更加完善溺欧。

11.借口和抽象類(lèi)的區(qū)別

1、抽象類(lèi)和接口都不能直接實(shí)例化柏肪,如果要實(shí)例化姐刁,抽象類(lèi)變量必須指向?qū)崿F(xiàn)所有抽象方法的子類(lèi)對(duì)象,接口變量必須指向?qū)崿F(xiàn)所有接口方法的類(lèi)對(duì)象烦味。

2聂使、抽象類(lèi)要被子類(lèi)繼承,接口要被類(lèi)實(shí)現(xiàn)谬俄。

3柏靶、接口只能做方法申明,抽象類(lèi)中可以做方法申明溃论,也可以做方法實(shí)現(xiàn)

4屎蜓、接口里定義的變量只能是公共的靜態(tài)的常量,抽象類(lèi)中的變量是普通變量钥勋。

5炬转、抽象類(lèi)里的抽象方法必須全部被子類(lèi)所實(shí)現(xiàn)控汉,如果子類(lèi)不能全部實(shí)現(xiàn)父類(lèi)抽象方法,那么該子類(lèi)只能是抽象類(lèi)返吻。同樣姑子,一個(gè)實(shí)現(xiàn)接口的時(shí)候,如不能全部實(shí)現(xiàn)接口方法测僵,那么該類(lèi)也只能為抽象類(lèi)街佑。

6、抽象方法只能申明捍靠,不能實(shí)現(xiàn)沐旨。abstract void abc();不能寫(xiě)成abstract void abc(){}。

7榨婆、抽象類(lèi)里可以沒(méi)有抽象方法

8磁携、如果一個(gè)類(lèi)里有抽象方法,那么這個(gè)類(lèi)只能是抽象類(lèi)

9良风、抽象方法要被實(shí)現(xiàn)谊迄,所以不能是靜態(tài)的,也不能是私有的烟央。

10统诺、接口可繼承接口,并可多繼承接口疑俭,但類(lèi)只能單根繼承粮呢。

12.Android四大基本組件介紹與生命周期

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市钞艇,隨后出現(xiàn)的幾起案子啄寡,更是在濱河造成了極大的恐慌,老刑警劉巖哩照,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挺物,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡葡秒,警方通過(guò)查閱死者的電腦和手機(jī)姻乓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)眯牧,“玉大人蹋岩,你說(shuō)我怎么就攤上這事⊙伲” “怎么了剪个?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)版确。 經(jīng)常有香客問(wèn)我扣囊,道長(zhǎng)乎折,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任侵歇,我火速辦了婚禮骂澄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惕虑。我一直安慰自己坟冲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布溃蔫。 她就那樣靜靜地躺著健提,像睡著了一般。 火紅的嫁衣襯著肌膚如雪伟叛。 梳的紋絲不亂的頭發(fā)上私痹,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音统刮,去河邊找鬼紊遵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛网沾,可吹牛的內(nèi)容都是我干的癞蚕。 我是一名探鬼主播蕊爵,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼辉哥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了攒射?” 一聲冷哼從身側(cè)響起醋旦,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎会放,沒(méi)想到半個(gè)月后饲齐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡咧最,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年捂人,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矢沿。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡滥搭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捣鲸,到底是詐尸還是另有隱情瑟匆,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布栽惶,位于F島的核電站愁溜,受9級(jí)特大地震影響疾嗅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜冕象,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一代承、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧渐扮,春花似錦次泽、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至只锻,卻和暖如春玖像,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背齐饮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工捐寥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人祖驱。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓握恳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親捺僻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乡洼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,139評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)匕坯,斷路器束昵,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法葛峻,內(nèi)部類(lèi)的語(yǔ)法锹雏,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法术奖,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,632評(píng)論 18 399
  • 2017年1月9日礁遵,微信小程序正式發(fā)布,這意味著依托微信采记,人們的出行佣耐,社交,購(gòu)物等方式將變得更加便捷有趣挺庞。那么去哪...
    微商叫獸閱讀 478評(píng)論 0 1
  • K - An abandoned sentiment from past CodeForces - 814A A ...
    Nioge閱讀 101評(píng)論 0 1