探索Android路由框架-ARouter之基本使用(一)

? ?本文已獨(dú)家授權(quán) 郭霖 ( guolin_blog?) 公眾號(hào)發(fā)布界酒!

????本文意在快速集成并掌握阿里Android技術(shù)團(tuán)隊(duì)開(kāi)源的一款路由框架缰泡。這款路由框架可以為我們的應(yīng)用開(kāi)發(fā)提供更好更豐富的跳轉(zhuǎn)方案。比如支持解析標(biāo)準(zhǔn)URL進(jìn)行跳轉(zhuǎn),并自動(dòng)注入?yún)?shù)到目標(biāo)頁(yè)面中;支持添加多個(gè)攔截器沉颂,自定義攔截順序(滿(mǎn)足攔截器設(shè)置的條件才允許跳轉(zhuǎn),所以這一特性對(duì)于某些問(wèn)題又提供了新的解決思路)悦污。

????本文示例代碼基于ARouter框架最新1.3版本進(jìn)行編寫(xiě)铸屉。介于篇幅的原因?qū)⑵浞殖蓛善谝黄饕榻B該框架的配置以及基本使用切端;第二篇主要的內(nèi)容是通過(guò)現(xiàn)象去研究路由框架的源碼彻坛。

? ? 如果對(duì)ARouter的使用已經(jīng)爛熟于心,那么可以直接進(jìn)入第二篇?ARouter源碼分析?

前言:

? ? 首先借用阿里云棲社區(qū)的一段話(huà):我們所使用的原生路由方案一般是通過(guò)顯式intent和隱式intent兩種方式實(shí)現(xiàn)的(這里主要是指跳轉(zhuǎn)Activity or Fragment)帆赢。在顯式intent的情況下小压,因?yàn)闀?huì)存在直接的類(lèi)依賴(lài)的問(wèn)題,導(dǎo)致耦合非常嚴(yán)重椰于;而在隱式intent情況下怠益,則會(huì)出現(xiàn)規(guī)則集中式管理,導(dǎo)致協(xié)作變得非常困難瘾婿。一般而言配置規(guī)則都是在Manifest中的蜻牢,這就導(dǎo)致了擴(kuò)展性較差。除此之外偏陪,使用原生的路由方案會(huì)出現(xiàn)跳轉(zhuǎn)過(guò)程無(wú)法控制的問(wèn)題抢呆,因?yàn)橐坏┦褂昧薙tartActivity()就無(wú)法插手其中任何環(huán)節(jié)了,只能交給系統(tǒng)管理笛谦,這就導(dǎo)致了在跳轉(zhuǎn)失敗的情況下無(wú)法降級(jí)抱虐,而是會(huì)直接拋出運(yùn)營(yíng)級(jí)的異常。這時(shí)候如果考慮使用自定義的路由組件就可以解決以上問(wèn)題饥脑,比如通過(guò)URL索引就可以解決類(lèi)依賴(lài)的問(wèn)題恳邀;通過(guò)分布式管理頁(yè)面配置可以解決隱式intent中集中式管理Path的問(wèn)題;自己實(shí)現(xiàn)整個(gè)路由過(guò)程也可以擁有良好的擴(kuò)展性灶轰,還可以通過(guò)AOP的方式解決跳轉(zhuǎn)過(guò)程無(wú)法控制的問(wèn)題谣沸,與此同時(shí)也能夠提供非常靈活的降級(jí)方式。

ARouter官方項(xiàng)目地址

添加依賴(lài)

添加依賴(lài)

javaCompileOptions {

annotationProcessorOptions {

arguments = [moduleName :project.getName() ]

} }

compile'com.alibaba:arouter-api:1.3.1'

annotationProcessor'com.alibaba:arouter-compiler:1.1.4'

初始化

官方建議我們?cè)贏pplication里面進(jìn)行ARouter初始化笋颤,于是乎就有了以下代碼:


初始化

然后別忘記了在清單文件里面配置自定義的Application和我們的Activity乳附。

項(xiàng)目依賴(lài)導(dǎo)入和初始化就已經(jīng)完成了,下面就開(kāi)始正式的功能使用以及簡(jiǎn)單的封裝。

開(kāi)始使用:

1)首先:在Activity/Fragment類(lèi)上面寫(xiě)上 Route path 注解赋除。

? ? ? 注意:這里的路徑需要注意的是至少需要有兩級(jí)阱缓,/xx/xx

2)然后:在Activity/Fragment類(lèi)里面進(jìn)入Arouter 注入,也就是:ARouter.getInstance().inject(this);

3)接著:目標(biāo)的Activity類(lèi)上面需要聲明Route path 注解贤重,以此對(duì)應(yīng)(跳轉(zhuǎn)如果不對(duì)應(yīng)路徑茬祷,框架會(huì)Toast說(shuō)路徑不匹配)

上述說(shuō)明的簡(jiǎn)單使用如下圖:

簡(jiǎn)單使用

理論上來(lái)說(shuō)清焕,如果只是進(jìn)行簡(jiǎn)單的跳轉(zhuǎn)頁(yè)面并蝗,

ARouter.getInstance().build(“目標(biāo)界面對(duì)應(yīng)的路徑”).navigation(); 就這樣一行代碼即可完成跳轉(zhuǎn)界面。

好了秸妥,看到這里我們就會(huì)發(fā)現(xiàn)滚停,路徑的標(biāo)簽如果多了就不是很好管理,(所以更好的選擇是寫(xiě)一個(gè)類(lèi)粥惧,在這個(gè)類(lèi)里面統(tǒng)一管理和維護(hù)路徑標(biāo)簽键畴,不僅利于維護(hù)也方便后期拓展,看到路徑就一目了然突雪,哇~這個(gè)路徑對(duì)應(yīng)的是登錄界面起惕,這個(gè)路徑對(duì)應(yīng)的是詳情界面);其次咏删,每個(gè)頁(yè)面的注入惹想,也就是ARouter.getInstance().inject(this);這句代碼出現(xiàn)的幾率會(huì)寫(xiě)的很多,(而且一般的常規(guī)邏輯是有注入就有解綁或者釋放資源)所以我們應(yīng)該簡(jiǎn)單封裝起來(lái)提高效率

簡(jiǎn)單封裝

首先是路徑管理:

路徑統(tǒng)一管理

然后是注入封裝:

這里多提一嘴督函,優(yōu)秀的第三方框架如果一般有注入或者綁定的API嘀粱,那與之對(duì)應(yīng)的一般就會(huì)有釋放或者解綁資源的API。(這樣做的本質(zhì)是優(yōu)化內(nèi)存)其中辰狡, ARouter.getInstance().destroy( ) ; 這個(gè)API一目了然锋叨,就是釋放資源的API。下面就是開(kāi)始注入和釋放資源的封裝:

注入封裝

筆者在Activity的基類(lèi)里面通過(guò)生命周期進(jìn)行了注入和解綁宛篇,但是項(xiàng)目運(yùn)行后發(fā)現(xiàn)了一個(gè)問(wèn)題娃磺,就是如果在onDestroy()里面調(diào)用了?ARouter.getInstance().destroy( ) ; 在進(jìn)入目標(biāo)Activity之后,然后按back鍵返回原界面的時(shí)候叫倍,APP會(huì)報(bào)錯(cuò)崩潰偷卧,下面是崩潰日志:

????仔細(xì)一看,初始化有問(wèn)題段标?在前面我們說(shuō)到在自定義Application里面已經(jīng)初始化了ARouter涯冠,且在清單文件里面配置了自定義的Application,但是依舊提示沒(méi)有初始化逼庞,這就納了個(gè)悶蛇更?然后想了想,可能是?ARouter.getInstance().destroy( );這行代碼的使用位置可能用錯(cuò)了派任。然后既然是在Application里面進(jìn)行的初始化砸逊,那么就可以將這行釋放資源的代碼,寫(xiě)在Application生命周期的onTerminate( )里面掌逛,果不其然师逸,項(xiàng)目運(yùn)行后就沒(méi)什么問(wèn)題了。當(dāng)然豆混,這是我自己的思路篓像,有更好的意見(jiàn)和想法請(qǐng)?jiān)谠u(píng)論區(qū)指出,謝謝皿伺。

初始化

封裝完畢了路徑標(biāo)識(shí)以及注入釋放等基本功能员辩,我們回到ARouter的基本使用:

簡(jiǎn)單頁(yè)面跳轉(zhuǎn)

如果只是簡(jiǎn)單的頁(yè)面跳轉(zhuǎn),一行代碼即可完成鸵鸥,如下圖

簡(jiǎn)單跳轉(zhuǎn) - 1

其中奠滑,build里面是頁(yè)面的標(biāo)簽路徑,對(duì)應(yīng)的就是目標(biāo)Activity的這里妒穴,也就是類(lèi)注釋標(biāo)簽路徑要一致:

Ps:不要忘了在清單文件里面配置Activity宋税。

帶參數(shù)的界面跳轉(zhuǎn)

????帶參數(shù)的跳轉(zhuǎn)是很常見(jiàn)的功能,Android可以通過(guò)Bundle去傳遞參數(shù)讼油,如果使用ARouter框架杰赛,它傳遞參數(shù)通過(guò)以下去操作:

????ARouter傳遞對(duì)象的時(shí)候,首先該對(duì)象需要Parcelable或者Serializable序列化汁讼,可能Parcelable這個(gè)序列化大家覺(jué)得手寫(xiě)起來(lái)比較麻煩淆攻,但是Android Studio已經(jīng)有一些插件幫我們自動(dòng)生成Parcelable序列化了(因?yàn)锳ndroid用Parcelable序列化優(yōu)勢(shì)會(huì)更加明顯一些)

????字符串、char嘿架、int等基本數(shù)據(jù)類(lèi)型當(dāng)然都是可以傳遞的

????當(dāng)然瓶珊,它也可以直接傳Bundle、數(shù)組耸彪、列表等很多對(duì)象伞芹,傳遞類(lèi)型如下圖

傳遞類(lèi)型

攜帶參數(shù)的界面跳轉(zhuǎn),簡(jiǎn)單使用如下圖

跳轉(zhuǎn)傳遞參數(shù)

其中蝉娜,第一個(gè)參數(shù)代表的是參數(shù)的key,第二個(gè)參數(shù)對(duì)應(yīng)的是我們要傳遞的屬性值唱较,也就是value

那么目標(biāo)界面如何獲取傳遞過(guò)來(lái)的值?

這個(gè)時(shí)候召川,我們需要在目標(biāo)界面南缓,使用Autowired注解,

Autowired 注解

這樣就可以獲取到傳遞過(guò)來(lái)的值了

獲取屬性值

值得注意的是荧呐,只有當(dāng) @Autowired(name = "test")汉形,也就是key標(biāo)簽一致的情況下纸镊,才可以獲取到對(duì)象的值,如果不寫(xiě)標(biāo)簽名概疆,結(jié)果會(huì)為null逗威,

Autowired 注解

所以為了規(guī)避每一個(gè)可能會(huì)遇到的風(fēng)險(xiǎn),建議在@Autowired里面 都寫(xiě)上與之對(duì)應(yīng)具體的key名岔冀。

界面跳轉(zhuǎn)動(dòng)畫(huà)

直接調(diào)用withTransition凯旭,里面?zhèn)魅雰蓚€(gè)動(dòng)畫(huà)即可(R.anim.xxx)

跳轉(zhuǎn)動(dòng)畫(huà)

使用URI進(jìn)行跳轉(zhuǎn)

ARouter框架也可以使用URI進(jìn)行匹配跳轉(zhuǎn),代碼也很少使套,只需匹配路徑一致即可完成跳轉(zhuǎn):

URI - 匹配跳轉(zhuǎn)

Fragment跳轉(zhuǎn)

Fragment的跳轉(zhuǎn)也可以參照Activity跳轉(zhuǎn)罐呼,第一步依舊是先寫(xiě)上類(lèi)注釋?zhuān)缓笫菑?qiáng)轉(zhuǎn),代碼如下

Fragment跳轉(zhuǎn)

進(jìn)階用法之?dāng)r截器:

????攔截器是ARouter這一款框架的亮點(diǎn)童漩。說(shuō)起攔截器這個(gè)概念弄贿,可能印象更加深刻的是OkHttp的攔截器,OkHttp的攔截器主要是用來(lái)攔截請(qǐng)求體(比如添加請(qǐng)求Cookie)和攔截響應(yīng)體(判斷Token是否過(guò)期)矫膨,在真正的請(qǐng)求和響應(yīng)前做一些判斷和修改然后在去進(jìn)行操作,大抵這就是攔截器的簡(jiǎn)單概念期奔。那么侧馅,ARouter框架的攔截器是怎么實(shí)現(xiàn)的?

????ARouter的攔截器呐萌,是通過(guò)實(shí)現(xiàn)?IInterceptor接口馁痴,重寫(xiě)init()和process()方法去完成攔截器內(nèi)部操作的。

????首先我們定義兩個(gè)攔截器:

攔截器 - 1
攔截器 - 2

????首先肺孤,定義ARouter攔截器必須要使用Interceptor類(lèi)注解罗晕。注解里面的 priority(也就是紅色框) 這個(gè)是聲明攔截器的優(yōu)先級(jí)、里面的屬性值是int類(lèi)型赠堵。既然是定義優(yōu)先級(jí)小渊,我們這里定義2個(gè)攔截器來(lái)測(cè)試看看優(yōu)先級(jí)是如何區(qū)分誰(shuí)先誰(shuí)后的??jī)蓚€(gè)攔截器寫(xiě)完之后茫叭,運(yùn)行下項(xiàng)目看下效果:

攔截器初始化先后順序

????結(jié)論 1:根據(jù)實(shí)驗(yàn)得知酬屉,使用Interceptor類(lèi)注解的priority數(shù)值越小,越先執(zhí)行揍愁,優(yōu)先級(jí)越高呐萨。(四大組件中的廣播,優(yōu)先級(jí)的取值是 -1000到1000莽囤,數(shù)值越大優(yōu)先級(jí)越高)

????那么谬擦,還有一種情況,如果兩個(gè)攔截器定義的優(yōu)先級(jí)都是一樣的朽缎,那么誰(shuí)的優(yōu)先級(jí)會(huì)高惨远?是根據(jù)類(lèi)的字符串長(zhǎng)度來(lái)判斷嘛還是別的條件來(lái)判斷的蔚舀??

????首先锨络,將上面的攔截器的優(yōu)先級(jí)改成一樣(都改成1)赌躺,項(xiàng)目編譯試試,結(jié)果發(fā)現(xiàn)項(xiàng)目就會(huì)直接報(bào)錯(cuò)羡儿!

同優(yōu)先級(jí)問(wèn)題

????看下具體的錯(cuò)誤原因:

相同優(yōu)先級(jí)錯(cuò)誤原因

????翻譯過(guò)來(lái)就是他們使用了相同的優(yōu)先級(jí)礼患,所以:

????結(jié)論 2:如果兩個(gè)攔截器的優(yōu)先級(jí)一樣,項(xiàng)目編譯就會(huì)報(bào)錯(cuò)掠归。所以缅叠,不同攔截器定義的優(yōu)先級(jí)屬性值不能相同

????我們到這兩個(gè)攔截器里面加一點(diǎn)篩選條件的代碼:

攔截器 - 3

????將這段代碼加進(jìn)去之后,重新運(yùn)行App虏冻,打印日志結(jié)果如下:

攔截器 - 執(zhí)行流程

????為了方便看清運(yùn)行的日志肤粱,我用三種顏色的箭頭去對(duì)應(yīng)。首先是兩個(gè)攔截器的初始化厨相,然后领曼,調(diào)用了NavigationCallback這個(gè)回調(diào)函數(shù)里面的onFound(),然后執(zhí)行了攔截器里面的process()方法蛮穿;當(dāng)攔截器的process()方法執(zhí)行完畢以后庶骄,最終回調(diào)了NavigationCallback里面的onArrival()方法。攔截器的工作流程大抵就是這樣践磅。那么单刁,NavigationCallback這個(gè)又是什么?實(shí)際上府适,NavigationCallback這個(gè)簡(jiǎn)單理解就是ARouter在路由跳轉(zhuǎn)的過(guò)程中羔飞,我們可以監(jiān)聽(tīng)路由的一個(gè)具體過(guò)程。它一共有四個(gè)方法:

NavigationCallback

那么檐春,這個(gè)回調(diào)里面的 Postcard 又是什么意思逻淌?點(diǎn)進(jìn)去源碼看看,類(lèi)注釋寫(xiě)的一目了然:

Postcard類(lèi)注釋

紅色框翻譯過(guò)來(lái)的類(lèi)注釋就是:一個(gè)包含路線(xiàn)圖的容器喇聊。

既然是路線(xiàn)圖的容器恍风,那肯定有些API會(huì)獲取到相應(yīng)的信息,

Group簡(jiǎn)單使用

????通過(guò)Postcard可以獲取到路徑的組以及全路徑誓篱,那么朋贬,路徑的組(Group)又是什么?是這樣窜骄,一般來(lái)說(shuō)锦募,ARouter在編譯期框架掃描了所有的注冊(cè)頁(yè)面/字段/攔截器等,那么很明顯運(yùn)行期不可能一股腦全部加載進(jìn)來(lái)邻遏,這樣就太不和諧了糠亩。所以就使用分組來(lái)管理虐骑,我們的類(lèi)標(biāo)簽里面的注釋?zhuān)瑢?duì)于group默認(rèn)是 “ ”(空字符串)如下圖:

????在 Group簡(jiǎn)單使用 這張圖上面,根據(jù)日志赎线,打印了分組的信息廷没,可以發(fā)現(xiàn)Group的值默認(rèn)就是第一個(gè) / ?/(兩個(gè)分隔符) 之間的內(nèi)容。

????那么垂寥,我們也可以自定義分組颠黎,來(lái)進(jìn)行界面跳轉(zhuǎn),所以ARouter又提供了一種解決方案:

自定義分組 實(shí)現(xiàn)跳轉(zhuǎn)界面

如果使用自定義分組來(lái)跳轉(zhuǎn)界面滞项,只需要在源代碼改動(dòng)以下三個(gè)位置:

1:類(lèi)注解新增 group狭归,賦值我們自定義的組名,(依舊統(tǒng)一寫(xiě)在一個(gè)類(lèi)里面這樣便于管理)

自定義分組跳轉(zhuǎn)界面 - 1

2:在build方法里面(這是一個(gè)方法重載)文判,添加我們的與之對(duì)應(yīng)的組名

自定義分組跳轉(zhuǎn) - 2

3:在被跳轉(zhuǎn)的Activity里面的類(lèi)注釋?zhuān)由贤瑯拥慕M名

自定義分組跳轉(zhuǎn) - 3

通過(guò)上面三個(gè)步驟即可完成 自定義分組 來(lái)完成界面跳轉(zhuǎn)

自定義分組顯示結(jié)果

通過(guò)日志顯示过椎,這里的組名已經(jīng)被我們更改成自定義分組且成功完成了跳轉(zhuǎn)。

ARouter如何實(shí)現(xiàn)類(lèi)似startActivityForResult()戏仓?

這種應(yīng)用場(chǎng)景也是很常見(jiàn)的疚宇,那ARouter該如何實(shí)現(xiàn)?

第一步:為了方便看效果柜去,我們?cè)诘谝粋€(gè)Activity設(shè)置requestCode 為123灰嫉,

onActivityResult

第二步:需要在跳轉(zhuǎn)的navigation方法(這是一個(gè)方法重載)里面的第二個(gè)參數(shù),設(shè)置我們定義的requestCode嗓奢,(通過(guò)匹配requestCode 來(lái)實(shí)現(xiàn)該功能)

第三步:在第二個(gè)界面的setResult方法里面,寫(xiě)上對(duì)應(yīng)的resultCode浑厚,這里就不展示Intent數(shù)據(jù)了

綜合上面三個(gè)步驟股耽,項(xiàng)目編譯運(yùn)行,跳轉(zhuǎn)到第二個(gè)界面然后返回上一個(gè)界面钳幅,日志成功打游矧:

ARouter路由框架的基本使用就介紹到這里,源碼分析請(qǐng)看第二篇敢艰。

探索Android路由框架-ARouter之深挖源碼

如果這篇文章對(duì)您有開(kāi)發(fā)or學(xué)習(xí)上的些許幫助诬乞,希望各位看官留下寶貴的star,謝謝钠导。

Ps:著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)注明作者, 商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)震嫉,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處(開(kāi)頭或結(jié)尾請(qǐng)?zhí)砑愚D(zhuǎn)載出處,添加原文url地址),文章請(qǐng)勿濫用牡属、開(kāi)源項(xiàng)目?jī)H供學(xué)習(xí)交流票堵、也希望大家尊重筆者的勞動(dòng)成果,謝謝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末逮栅,一起剝皮案震驚了整個(gè)濱河市悴势,隨后出現(xiàn)的幾起案子窗宇,更是在濱河造成了極大的恐慌,老刑警劉巖特纤,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件军俊,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡捧存,警方通過(guò)查閱死者的電腦和手機(jī)粪躬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)矗蕊,“玉大人短蜕,你說(shuō)我怎么就攤上這事∩悼В” “怎么了朋魔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)卿操。 經(jīng)常有香客問(wèn)我警检,道長(zhǎng),這世上最難降的妖魔是什么害淤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任扇雕,我火速辦了婚禮,結(jié)果婚禮上窥摄,老公的妹妹穿的比我還像新娘镶奉。我一直安慰自己,他們只是感情好崭放,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布哨苛。 她就那樣靜靜地躺著,像睡著了一般币砂。 火紅的嫁衣襯著肌膚如雪建峭。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天决摧,我揣著相機(jī)與錄音亿蒸,去河邊找鬼。 笑死掌桩,一個(gè)胖子當(dāng)著我的面吹牛边锁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拘鞋,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼砚蓬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了盆色?” 一聲冷哼從身側(cè)響起灰蛙,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤祟剔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后摩梧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體物延,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年仅父,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了叛薯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡笙纤,死狀恐怖耗溜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情省容,我是刑警寧澤抖拴,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站腥椒,受9級(jí)特大地震影響阿宅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜笼蛛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一洒放、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧滨砍,春花似錦往湿、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至日川,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間矩乐,已是汗流浹背龄句。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留散罕,地道東北人分歇。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像欧漱,于是被迫代替她去往敵國(guó)和親职抡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,520評(píng)論 25 707
  • 開(kāi)發(fā)一款A(yù)pp误甚,總會(huì)遇到各種各樣的需求和業(yè)務(wù)缚甩,這時(shí)候選擇一個(gè)簡(jiǎn)單好用的輪子谱净,就可以事半功倍 前言 上面一段代碼,在...
    WangDeFa閱讀 65,701評(píng)論 44 199
  • 今天去南站把去拉薩的車(chē)票退了擅威,好在最后一天帶著身份證壕探,沒(méi)有額外費(fèi)用產(chǎn)生。 隨后去了國(guó)際婦幼保健院郊丛,還是很感恩在收費(fèi)...
    愛(ài)思塔閱讀 206評(píng)論 1 0