新聞中心

        Android_Context詳解

        作者: 時(shí)間:2016-09-12 來(lái)源:網(wǎng)絡(luò) 收藏

        注:NO1 表示Application context的確可以開(kāi)始一個(gè)Activity,但是它需要?jiǎng)?chuàng)建一個(gè)新的task。這可能會(huì)滿足一些特定的需求,但是在你的應(yīng)用中會(huì)創(chuàng)建一個(gè)不標(biāo)準(zhǔn)的回退棧(back stack),這通常是不推薦的或者不是是好的實(shí)踐。

        本文引用地址:http://www.104case.com/article/201609/304658.htm

        NO2 表示這是非法的,但是這個(gè)填充(inflation)的確可以完成,但是是使用所運(yùn)行的系統(tǒng)默認(rèn)的主題(theme),而不是你app定義的主題。

        NO3 在Android4.2以上,如果Receiver是null的話(這是用來(lái)獲取一個(gè)sticky broadcast的當(dāng)前 值的),這是允許的。

        用戶界面UI

        從前面的表格中可以看到,application context有很多功能并不是合適去做,而這些功能都與UI相關(guān)。實(shí)際上,只有Activity能夠處理所有與UI相關(guān)的任務(wù)。其他類別的context實(shí)例功能都差不多。

        幸運(yùn)的是,在應(yīng)用中這三種操作基本上都不需要在Activity范圍之外進(jìn)行,這很可能是android框架故意這么設(shè)計(jì)的。嘗試顯示一個(gè)使用Aplication context創(chuàng)建的Dialog,或者使用Application context開(kāi)始一個(gè)Activity,系統(tǒng)會(huì)拋出一個(gè)異常,讓你的application崩潰,非常強(qiáng)的告訴你某些地方出了問(wèn)題。

        一個(gè)并不明顯的問(wèn)題是填充布局(inflating layout)。如果你已經(jīng)讀過(guò)了我(原文作者)的上一篇文章Layout inflation,你就已經(jīng)知道它可能是一個(gè)非常神秘過(guò)程,伴隨一些隱藏的行為。使用正確的context關(guān)系到其中的一個(gè)行為。當(dāng)你使用Application context來(lái)inflate一個(gè)布局的時(shí)候,框架并不會(huì)報(bào)錯(cuò),并返回一個(gè)使用系統(tǒng)默認(rèn)的主題創(chuàng)建一個(gè)完美的view給你,而沒(méi)有考慮你的applicaiton自定義的theme和style。這是因?yàn)锳citivity是唯一的綁定了在manifast文件種定義主題的Context。其他的Context實(shí)例將會(huì)使用系統(tǒng)默認(rèn)的主題來(lái)inflater你的view。導(dǎo)致顯示的結(jié)果并不是你所希望的。

        規(guī)則的路口

        可能有些讀者已經(jīng)得出兩個(gè)規(guī)則互相矛盾的結(jié)論。可能有些情況下,在某些Application的設(shè)計(jì)中,我們可能既必須長(zhǎng)期保存一個(gè)的引用,并且為了完成與UI相關(guān)的工作又必須保存一個(gè)Activity。如果出現(xiàn)這種情況,我將會(huì)強(qiáng)烈建議你重新考慮你的設(shè)計(jì),它將是一個(gè)很好的“反框架”教材。

        經(jīng)驗(yàn)法則

        絕大多數(shù)情況下,使用在你的所工作的組建內(nèi)部能夠直接獲取的Context。只要這個(gè)引用沒(méi)有超過(guò)這個(gè)組建的生命周期,你可以安全的保存這個(gè)引用。一旦你要保存一個(gè)context的引用,它超過(guò)了你的Activity或者Service的生命周期范圍,甚至是暫時(shí)的,你就需要轉(zhuǎn)換你的引用為Application context。


        上一頁(yè) 1 2 下一頁(yè)

        關(guān)鍵詞:

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 旺苍县| 怀远县| 确山县| 沁阳市| 外汇| 阿拉善左旗| 康马县| 邻水| 疏勒县| 石渠县| 新化县| 邵武市| 建宁县| 泽库县| 平江县| 介休市| 清镇市| 涞源县| 株洲市| 广河县| 寿宁县| 巫山县| 屯门区| 抚远县| 内江市| 当雄县| 二连浩特市| 桂林市| 黔西县| 和硕县| 柞水县| 五家渠市| 娄烦县| 额尔古纳市| 无为县| 海宁市| 浦江县| 遵化市| 油尖旺区| 丽江市| 昌宁县|