記錄一次探索Android源碼的Settings中Activity的過程

最近要改藍牙相關(guān)的東西撒桨,順道看了看其中的Acitivity棋电,發(fā)現(xiàn)有些Activity找不到對應(yīng)的文件撕攒,不像在應(yīng)用層做的會有自己的XXX.java文件。例如我要修改的ConnectedDeviceDashboardActivity坦喘。

先在Settings App的Manifest中搜索它

搜索結(jié)果

發(fā)現(xiàn)只有這個activity,然后可以看到它是繼承于Settings這個activity,然后我又去文件目錄中找對應(yīng)的activity旗吁,發(fā)現(xiàn)找不到對應(yīng)的文件码倦,沒有辦法只有先去看它的父Activity蝗柔。

父Activity

發(fā)現(xiàn)它也沒啥特別的嬉橙,只好去看看它對應(yīng)的文件,好在它又對應(yīng)的java文件伟件,于是就發(fā)現(xiàn)它的Activity都是這樣創(chuàng)建的。

Settings文件

哇议经,發(fā)現(xiàn)一個我從來沒見過的用法斧账,Settings下的大部分Activity都繼承于同一個父類,于是只好去看看它的父類煞肾,發(fā)現(xiàn)終于看到熟悉的Activity了咧织,先看了看onCreate()生命周期,

getMetaData()方法

先從manifest文件中得到額外數(shù)據(jù)籍救,取得可能存在的要加載的Fragment习绢,但是Settings這個Activity沒有對應(yīng)的meta-Data,所以會返回空,繼續(xù)往下闪萄,

這里做了下是不是從快捷鍵進入梧却,是不是Settings主界面,mIsShowingDashboard這個參數(shù)決定了后面是加載Settings主界面還是其他的Activity败去,這里當前的Activity就是Settings放航,所以該值為true,繼續(xù)往下

這里設(shè)置了一下顯示導(dǎo)航欄圆裕,隱藏原來的標題欄并使其不可點擊广鳍,差不多Settings的Activity就啟動完了。

那么怎么加載的不同界面喃吓妆,還記得之前的getMetaData()方法里的mFragmentClass嗎赊时,搜索發(fā)現(xiàn)只有一處地方使用了getStartingFragmentClass()方法,找它的調(diào)用之處行拢,發(fā)現(xiàn)和之前對上了;如果返回的fragment不為空蛋叼,則把Fragment添加到intent中

取出Fragment
判斷是否存在fragment

發(fā)現(xiàn)存入Intent中的Fragment的名字馬上就取了出來,并且在后面被使用了剂陡,

如果savedState不為空狈涮,比如旋轉(zhuǎn)屏幕這種情況,那么就不從新加載鸭栖,

進入launchSettingFragment()方法歌馍,可以看到當不是顯示主設(shè)置界面以及加載的Fragement的名字不為空時,就會調(diào)用switchToFragment()方法

進入switchToFragment()方法晕鹊,經(jīng)過一些判斷Fragment沒有問題后松却,就可以初始化了,調(diào)用Fragment的instantiate方法溅话,

這個方法會先去緩存中查找有無該fragment晓锻,有則直接加載,沒有則會調(diào)用newInstance()方法創(chuàng)建一個新的Fragment飞几,之后在這個方法里還會判斷args是否為null砚哆,不為null則將之前的參數(shù)保存到新的fragment中,這也告訴我們在Fragment中存儲數(shù)據(jù)最好使用setArguments()方法傳遞數(shù)據(jù)屑墨,而不是通過帶參數(shù)的構(gòu)造方法躁锁,

擴展:

看看onResume()生命周期,

onResume()

發(fā)現(xiàn)只有這么幾行代碼卵史,進入updateTitlesList()方法战转,

發(fā)現(xiàn)它開啟了一個線程調(diào)用doUpdateTilesList()方法,進入以躯,

進入該方法發(fā)現(xiàn)一長串的setTileEnabled方法槐秧,又調(diào)用了new ComponentName(),直覺告訴我們終于要找了,進入setTileEnabled()刁标,

先判斷是否合法颠通,然后返回,在該文件中搜索setTileEnabled()方法命雀,你會發(fā)現(xiàn)只有這么一處,不科學(xué)啊斩箫,參數(shù)對不齊吏砂,肯定不是這個方法了,又不可能是實現(xiàn)接口乘客,那就只能是繼承了狐血,

然后你就發(fā)現(xiàn)它還不在同一個包下,只有跳出工程去看看易核,找到SettingsDrawerActivity匈织,

搜索setTileEnabled()方法,

這里傳入的enabled的值是由!UserManager.isDeviceInDemoMode(this)牡直,一般為enabled值為ture缀匕,我查看了isDeviceInDemoMode()這個方法,發(fā)現(xiàn)它和Demo Mode碰逸,演示模式有關(guān)乡小,一般沒開啟演示模式就不會返回true,

今日份就分析到這兒饵史,又學(xué)到了好多满钟。



手打不易,給個贊唄(Ubuntu下沒表情~_~)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胳喷,一起剝皮案震驚了整個濱河市湃番,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吭露,老刑警劉巖吠撮,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異讲竿,居然都是意外死亡纬向,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門戴卜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逾条,“玉大人,你說我怎么就攤上這事投剥∈χ” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吃警。 經(jīng)常有香客問我糕篇,道長,這世上最難降的妖魔是什么酌心? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任拌消,我火速辦了婚禮,結(jié)果婚禮上安券,老公的妹妹穿的比我還像新娘墩崩。我一直安慰自己,他們只是感情好侯勉,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布鹦筹。 她就那樣靜靜地躺著,像睡著了一般址貌。 火紅的嫁衣襯著肌膚如雪铐拐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天练对,我揣著相機與錄音遍蟋,去河邊找鬼。 笑死螟凭,一個胖子當著我的面吹牛匿值,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赂摆,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼挟憔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了烟号?” 一聲冷哼從身側(cè)響起绊谭,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎汪拥,沒想到半個月后达传,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡迫筑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年宪赶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脯燃。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡搂妻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辕棚,到底是詐尸還是另有隱情欲主,我是刑警寧澤邓厕,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站扁瓢,受9級特大地震影響详恼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜引几,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一昧互、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伟桅,春花似錦敞掘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽够掠。三九已至民褂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疯潭,已是汗流浹背赊堪。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留竖哩,地道東北人哭廉。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像相叁,于是被迫代替她去往敵國和親遵绰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

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