Android系統(tǒng)開篇[轉(zhuǎn) 學(xué)習(xí)]

一、引言原網(wǎng)址
Android系統(tǒng)非常龐大描姚、錯中復(fù)雜,其底層是采用Linux作為基底戈次,上層采用包含虛擬機(jī)的Java層以及Native層轩勘,通過系統(tǒng)調(diào)用(Syscall)連通系統(tǒng)的內(nèi)核空間與用戶空間。用戶空間主要采用C++和Java代碼怯邪,通過JNI技術(shù)打通用戶空間的Java層和Native層(C++/C)绊寻,從而融為一體。
Google官方提供了一張經(jīng)典的四層架構(gòu)圖悬秉,從下往上依次分為Linux內(nèi)核澄步、系統(tǒng)庫和Android運(yùn)行時環(huán)境、框架層以及應(yīng)用層這4層架構(gòu)和泌,其中每一層都包含大量的子模塊或子系統(tǒng)村缸。這只是如壘磚般地分層,并沒有表達(dá)Android整個系統(tǒng)的內(nèi)部架構(gòu)武氓、運(yùn)行機(jī)理梯皿,以及各個模塊之間是如何銜接與配合工作的。為了更深入地掌握Android整個架構(gòu)思想以及各個模塊在Android系統(tǒng)所處的地位與價值县恕,計劃以Android系統(tǒng)啟動過程為主線东羹,以進(jìn)程的視角來詮釋Android M系統(tǒng)全貌,全方位的深度剖析各個模塊功能弱睦,爭取各個擊破百姓。這樣才能猶如庖丁解牛渊额,解決况木、分析問題則能游刃有余垒拢。

android-arch1

二、Android架構(gòu)
Google提供的4層架構(gòu)圖很經(jīng)典火惊,但為了更進(jìn)一步透視Android系統(tǒng)架構(gòu)求类,本文更多的是以進(jìn)程的視角,以分層的架構(gòu)來詮釋Android系統(tǒng)的全貌屹耐,闡述Android內(nèi)部的環(huán)環(huán)相扣的內(nèi)在聯(lián)系尸疆。
系統(tǒng)啟動架構(gòu)圖
點(diǎn)擊查看大圖
process_status

圖解: Android系統(tǒng)啟動過程由上圖從下往上的一個過程:Loader
-> Kernel
-> Native
-> Framework
-> App
,接來下簡要說說每個過程:
2.1 Loader層
Boot ROM: 當(dāng)手機(jī)處于關(guān)機(jī)狀態(tài)時惶岭,長按Power鍵開機(jī)寿弱,引導(dǎo)芯片開始從固化在ROM
里的預(yù)設(shè)出代碼開始執(zhí)行,然后加載引導(dǎo)程序到RAM
按灶;
Boot Loader:這是啟動Android系統(tǒng)之前的引導(dǎo)程序症革,主要是檢查RAM,初始化硬件參數(shù)等功能鸯旁。

2.2 Kernel層
Kernel層是指Android內(nèi)核層噪矛,到這里才剛剛開始進(jìn)入Android系統(tǒng)。
啟動Kernel的swapper進(jìn)程(pid=0):該進(jìn)程又稱為idle進(jìn)程, 系統(tǒng)初始化過程Kernel由無到有開創(chuàng)的第一個進(jìn)程, 用于初始化進(jìn)程管理铺罢、內(nèi)存管理艇挨,加載Display,Camera Driver,Binder Driver等相關(guān)工作韭赘;
啟動kthreadd進(jìn)程(pid=2):是Linux系統(tǒng)的內(nèi)核進(jìn)程缩滨,會創(chuàng)建內(nèi)核工作線程kworkder,軟中斷線程ksoftirqd泉瞻,thermal等內(nèi)核守護(hù)進(jìn)程楷怒。kthreadd進(jìn)程是所有內(nèi)核進(jìn)程的鼻祖

2.3 Native層
這里的Native層主要包括init孵化來的用戶空間的守護(hù)進(jìn)程瓦灶、HAL層以及開機(jī)動畫等鸠删。啟動init進(jìn)程(pid=1),是Linux系統(tǒng)的用戶進(jìn)程,init進(jìn)程是所有用戶進(jìn)程的鼻祖
贼陶。
init進(jìn)程會孵化出ueventd刃泡、logd、healthd碉怔、installd烘贴、adbd、lmkd等用戶守護(hù)進(jìn)程撮胧;
init進(jìn)程還啟動servicemanager
(binder服務(wù)管家)桨踪、bootanim
(開機(jī)動畫)等重要服務(wù)
init進(jìn)程孵化出Zygote進(jìn)程,Zygote進(jìn)程是Android系統(tǒng)的第一個Java進(jìn)程(即虛擬機(jī)進(jìn)程)芹啥,Zygote是所有Java進(jìn)程的父進(jìn)程
锻离,Zygote進(jìn)程本身是由init進(jìn)程孵化而來的铺峭。

2.4 Framework層
Zygote進(jìn)程,是由init進(jìn)程通過解析init.rc文件后fork生成的汽纠,Zygote進(jìn)程主要包含:加載ZygoteInit類卫键,注冊Zygote Socket服務(wù)端套接字;
加載虛擬機(jī)虱朵;
preloadClasses莉炉;
preloadResouces。

System Server進(jìn)程碴犬,是由Zygote進(jìn)程fork而來絮宁,System Server是Zygote孵化的第一個進(jìn)程
,System Server負(fù)責(zé)啟動和管理整個Java framework服协,包含ActivityManager羞福,PowerManager等服務(wù)。
Media Server進(jìn)程蚯涮,是由init進(jìn)程fork而來治专,負(fù)責(zé)啟動和管理整個C++ framework,包含AudioFlinger遭顶,Camera Service张峰,等服務(wù)。

2.5 App層
Zygote進(jìn)程孵化出的第一個App進(jìn)程是Launcher棒旗,這是用戶看到的桌面App喘批;
Zygote進(jìn)程還會創(chuàng)建Browser,Phone铣揉,Email等App進(jìn)程饶深,每個App至少運(yùn)行在一個進(jìn)程上。
所有的App進(jìn)程都是由Zygote進(jìn)程fork生成的逛拱。

2.6 Syscall && JNI
Native與Kernel之間有一層系統(tǒng)調(diào)用(SysCall)層敌厘,見Linux系統(tǒng)調(diào)用(Syscall)原理;
Java層與Native(C/C++)層之間的紐帶JNI,見Android JNI原理分析朽合。

三俱两、通信方式
無論是Android系統(tǒng),還是各種Linux衍生系統(tǒng)曹步,各個組件宪彩、模塊往往運(yùn)行在各種不同的進(jìn)程和線程內(nèi),這里就必然涉及進(jìn)程/線程之間的通信讲婚。對于IPC(Inter-Process Communication, 進(jìn)程間通信)尿孔,Linux現(xiàn)有管道、消息隊列、共享內(nèi)存活合、套接字雏婶、信號量、信號這些IPC機(jī)制芜辕,Android額外還有Binder IPC機(jī)制,Android OS中的Zygote進(jìn)程的IPC采用的是Socket機(jī)制块差,在上層system server侵续、media server以及上層App之間更多的是采用Binder IPC方式來完成跨進(jìn)程間的通信。對于Android上層架構(gòu)中憨闰,很多時候是在同一個進(jìn)程的線程之間需要相互通信状蜗,例如同一個進(jìn)程的主線程與工作線程之間的通信,往往采用的Handler消息機(jī)制鹉动。
想深入理解Android內(nèi)核層架構(gòu)轧坎,必須先深入理解Linux現(xiàn)有的IPC機(jī)制;對于Android上層架構(gòu)泽示,則最常用的通信方式是Binder缸血、Socket、Handler械筛,當(dāng)然也有少量其他的IPC方式捎泻,比如殺進(jìn)程Process.killProcess()采用的是signal方式。下面說說Binder埋哟、Socket笆豁、Handler:
3.1 Binder
Binder作為Android系統(tǒng)提供的一種IPC機(jī)制,無論從系統(tǒng)開發(fā)還是應(yīng)用開發(fā)赤赊,都是Android系統(tǒng)中最重要的組成闯狱,也是最難理解的一塊知識點(diǎn),想了解為什么Android要采用Binder作為IPC機(jī)制抛计? 可查看我在知乎上的回答哄孤。深入了解Binder機(jī)制,最好的方法便是閱讀源碼吹截,借用Linux鼻祖Linus Torvalds曾說過的一句話:Read The Fucking Source Code录豺。下面簡要說說Binder IPC原理。
Binder IPC原理
Binder通信采用c/s架構(gòu)饭弓,從組件視角來說双饥,包含Client、Server弟断、ServiceManager以及binder驅(qū)動咏花,其中ServiceManager用于管理系統(tǒng)中的各種服務(wù)。

ServiceManager

想進(jìn)一步了解Binder,可查看Binder系列—開篇昏翰,Binder系列花費(fèi)了13篇文章的篇幅苍匆,從源碼角度出發(fā)來,講述Driver棚菊、Native浸踩、Framework、App四個層面的整個完整流程统求。根據(jù)有些讀者反饋這個系列還是不好理解检碗,這個binder涉及的層次跨度比較大,知識量比較廣, 建議大家先知道binder是用于進(jìn)程間通信,有個大致概念就可以.先去學(xué)習(xí)系統(tǒng)基本知識,等后面有一定功力再進(jìn)一步深入研究Binder.

原理篇

序號 文章名 概述
0 Binder系列—開篇 概述Binder
1 Binder系列3—啟動Service Manager ServiceManager守護(hù)進(jìn)程 注冊和查詢服務(wù)
2 Binder系列4—獲取Service Manager 獲取代理對象BpServiceManager
3 Binder系列5—注冊服務(wù)(addService) 注冊Media服務(wù)
4 Binder系列6—獲取服務(wù)(getService) 獲取Media代理,以及DeathRecipient
5 Binder系列7—framework層分析 framework層服務(wù)注冊和查詢码邻,Binder注冊
6 Binder系列—理解Binder線程池的管理 Binder的startThreadPool過程
7 Binder系列—徹底理解Android Binder通信架構(gòu) startService為主線
8 Binder系列10—總結(jié) Binder的簡單總結(jié)
9 Binder IPC的權(quán)限控制 clearCallingIdentity/restoreCallingIdentity

驅(qū)動篇:

序號 文章名 概述
1 Binder系列1—Binder Driver初探 驅(qū)動open/mmap/ioctl折剃,以及binder結(jié)構(gòu)體
2 Binder系列2—Binder Driver再探 Binder通信協(xié)議,內(nèi)存機(jī)制

使用篇:

序號 文章名 概述
1 Binder系列8—如何使用Binder Native層像屋、Framwrok層自定義Binder服務(wù)
2 Binder系列9—如何使用AIDL App層自定義Binder服務(wù)

3.2 Socket
Socket通信方式也是C/S架構(gòu)怕犁,比Binder簡單很多。在Android系統(tǒng)中采用Socket通信方式的主要:
zygote:用于孵化進(jìn)程己莺,系統(tǒng)進(jìn)程system_server孵化進(jìn)程時便通過socket向zygote進(jìn)程發(fā)起請求奏甫;
installd:用于安裝App的守護(hù)進(jìn)程,上層PackageManagerService很多實現(xiàn)最終都是交給它來完成凌受;
lmkd:lowmemorykiller的守護(hù)進(jìn)程扶檐,Java層的LowMemoryKiller最終都是由lmkd來完成;
adbd:這個也不用說胁艰,用于服務(wù)adb款筑;
logcatd:這個不用說,用于服務(wù)logcat腾么;
vold:即volume Daemon奈梳,是存儲類的守護(hù)進(jìn)程,用于負(fù)責(zé)如USB解虱、Sdcard等存儲設(shè)備的事件處理攘须。

等等還有很多,這里不一一列舉殴泰,Socket方式更多的用于Android framework層與native層之間的通信于宙。Socket通信方式相對于binder非常簡單,所以一直沒有寫相關(guān)文章悍汛,為了成一個體系捞魁,下次再補(bǔ)上。
3.3 Handler
Binder/Socket用于進(jìn)程間通信离咐,而Handler消息機(jī)制用于同進(jìn)程的線程間通信谱俭,Handler消息機(jī)制是由一組MessageQueue奉件、Message、Looper昆著、Handler共同組成的县貌,為了方便且稱之為Handler消息機(jī)制。
有人可能會疑惑凑懂,為何Binder/Socket用于進(jìn)程間通信煤痕,能否用于線程間通信呢?答案是肯定接谨,對于兩個具有獨(dú)立地址空間的進(jìn)程通信都可以摆碉,當(dāng)然也能用于共享內(nèi)存空間的兩個線程間通信,這就好比殺雞用牛刀疤坝。接著可能還有人會疑惑兆解,那handler消息機(jī)制能否用于進(jìn)程間通信馆铁?答案是不能跑揉,Handler只能用于共享內(nèi)存地址空間的兩個線程間通信,即同進(jìn)程的兩個線程間通信埠巨。很多時候历谍,Handler是工作線程向UI主線程發(fā)送消息,即App應(yīng)用中只有主線程能更新UI辣垒,其他工作線程往往是完成相應(yīng)工作后望侈,通過Handler告知主線程需要做出相應(yīng)地UI更新操作,Handler分發(fā)相應(yīng)的消息給UI主線程去完成勋桶,如下圖:

handler_communication

由于工作線程與主線程共享地址空間脱衙,即Handler實例對象mHandler
位于線程間共享的內(nèi)存堆上,工作線程與主線程都能直接使用該對象例驹,只需要注意多線程的同步問題捐韩。工作線程通過mHandler
向其成員變量MessageQueue
中添加新Message,主線程一直處于loop()方法內(nèi)鹃锈,當(dāng)收到新的Message時按照一定規(guī)則分發(fā)給相應(yīng)的handleMessage
()方法來處理荤胁。所以說,而Handler消息機(jī)制用于同進(jìn)程的線程間通信的核心是線程間共享內(nèi)存空間屎债,而不同進(jìn)程擁有不同的地址空間仅政,也就不能用handler來實現(xiàn)進(jìn)程間通信。
上圖只是Handler消息機(jī)制的一種處理流程盆驹,是不是只能工作線程向UI主線程發(fā)消息呢圆丹,其實不然,可以是UI線程向工作線程發(fā)送消息躯喇,也可以是多個工作線程之間通過handler發(fā)送消息运褪。更多關(guān)于Handler消息機(jī)制文章:
Android消息機(jī)制-Handler(framework篇)
Android消息機(jī)制-Handler(native篇)
Android消息機(jī)制3-Handler(實戰(zhàn))

要理解framework層源碼,掌握這3種基本的進(jìn)程/線程間通信方式是非常有必要,當(dāng)然Linux還有不少其他的IPC機(jī)制秸讹,比如共享內(nèi)存檀咙、信號、信號量璃诀,在源碼中也有體現(xiàn)弧可,如果想全面徹底地掌握Android系統(tǒng),還是需要對每一種IPCd機(jī)制都有所了解劣欢。
四棕诵、核心提綱
2016年新的一年剛開始,首先祝大家凿将、也祝自己在新的一年諸事順心校套,事業(yè)蒸蒸日上。在過去的一年牧抵,對于Android從底層一路到上層有不少自己的理解和沉淀笛匙,但總體較零散,未成體系犀变。借著今天(元旦假日的最后一天)妹孙,給自己的新的一年提前做一個計劃,把知識進(jìn)行歸檔整理與再學(xué)習(xí)获枝,從而加深對Android架構(gòu)的理解蠢正。通過前面對系統(tǒng)啟動的介紹,相信大家對Android系統(tǒng)有了一個整體觀省店,接下來需要抓核心嚣崭、理思路,爭取各個擊破懦傍。
計劃:不少文章還沒來得及進(jìn)一步加工雹舀,大篇章的源碼,有讀者跟我反饋看著發(fā)困谎脯,先別急葱跋,文章還會不斷更新和升級。前期計劃先將系統(tǒng)所有核心技術(shù)點(diǎn)的邊整理邊寫博客源梭; 后期工作有時間再根據(jù)大家的反饋以及自己的校驗娱俺,再不斷修正和完善所有文章,爭取給文章废麻,再進(jìn)一步精簡非核心代碼荠卷,增加可視化圖表以及文字的結(jié)論性分析。
博客定位: 基于Android 6.0的源碼
烛愧,專注于分享Android系統(tǒng)原理油宜、架構(gòu)分析的原創(chuàng)文章掂碱。 建議閱讀群體: 適合于正從事或者有興趣研究Android系統(tǒng)的工程師或者愛好者,也適合Android app高級工程師慎冤; 對于尚未入門或者剛?cè)腴T的app程序員閱讀可能會困難些疼燥,可能不是很適合。
看到Android整個系統(tǒng)架構(gòu)是如此龐大的, 該問如何學(xué)習(xí)Android系統(tǒng), 以下是我自己琢磨的Android的學(xué)習(xí)和研究論,僅供參考:如何自學(xué)Android.
4.1 系統(tǒng)啟動系列

android-booting

Android系統(tǒng)啟動-概述: Android系統(tǒng)中極其重要進(jìn)程:init, zygote, system_server, servicemanager 進(jìn)程:

序號 進(jìn)程啟動 概述
1 init進(jìn)程 Linux系統(tǒng)中用戶空間的第一個進(jìn)程, Init.main
2 zygote進(jìn)程 所有App進(jìn)程的父進(jìn)程, ZygoteInit.main
3 system_server進(jìn)程(上篇) 系統(tǒng)各大服務(wù)的載體, forkSystemServer過程
4 system_server進(jìn)程(下篇) 系統(tǒng)各大服務(wù)的載體, SystemServer.main
5 servicemanager進(jìn)程 binder服務(wù)的大管家, 守護(hù)進(jìn)程循環(huán)運(yùn)行在binder_loop
6 app進(jìn)程 通過Process.start啟動App進(jìn)程, ActivityThread.main

再來看看守護(hù)進(jìn)程(進(jìn)程名一般以d為后綴蚁堤,比如logd), 先介紹以下部分,后綴再增加.
debuggerd
installd
lmkd

4.2 系統(tǒng)穩(wěn)定性系列
Android系穩(wěn)定性主要是異常崩潰(crash)和執(zhí)行超時(timeout), Android系統(tǒng)穩(wěn)定性簡述 :

序號 文章名 類別
1 理解Android ANR的觸發(fā)原理 觸發(fā)ANR的場景以及機(jī)理
2 Input系統(tǒng)—ANR原理分析 input觸發(fā)ANR的原理
3 理解Android ANR的信息收集過程 AMS.appNotResponding過程分析,收集traces
4 ART虛擬機(jī)之Trace原理 kill -3 信息收集過程
5 Native進(jìn)程之Trace原理 debuggerd -b 信息收集過程
6 WatchDog工作原理 WatchDog觸發(fā)機(jī)制
7 理解Java Crash處理流程 AMS.handleApplicationCrash過程分析
8 理解Native Crash處理流程 debuggerd守護(hù)進(jìn)程

4.3 Android進(jìn)程系列
進(jìn)程對于系統(tǒng)非常重要醉者,系統(tǒng)運(yùn)轉(zhuǎn),各種服務(wù)披诗、組件的載體都依托于進(jìn)程撬即,對進(jìn)程理解越深刻,越能掌握系統(tǒng)整體架構(gòu)呈队。那么先來看看進(jìn)程相關(guān):

序號 文章名 類別
1 理解Android進(jìn)程創(chuàng)建流程 Process.start過程分析
2 理解殺進(jìn)程的實現(xiàn)原理 Process.killProcess過程分析
3 Android四大組件與進(jìn)程啟動的關(guān)系 AMS.startProcessLocked過程分析組件與進(jìn)程
4 Android進(jìn)程絕殺技–forceStop force-stop過程分析徹底移除組件與殺進(jìn)程
5 理解Android線程創(chuàng)建流程 3種不同線程的創(chuàng)建過程
6 徹底理解Android Binder通信架構(gòu) 以start-service為線,闡述進(jìn)程間通信機(jī)理
7 理解Binder線程池的管理 Zygote fork的進(jìn)程都默認(rèn)開啟binder線程池
8 Android進(jìn)程生命周期與ADJ 進(jìn)程adj, processState以及l(fā)mk
9 Android LowMemoryKiller原理分析 lmk原理分析
10 進(jìn)程優(yōu)先級 進(jìn)程nice,thread priority以及scheduler
11 Android進(jìn)程調(diào)度之a(chǎn)dj算法 updateOomAdjLocked過程
12 Android進(jìn)程整理 整理系統(tǒng)的所有進(jìn)程/線程

4.4 四大組件系列
對于App來說剥槐,Android應(yīng)用的四大組件Activity,Service宪摧,Broadcast Receiver粒竖, Content Provider最為核心,接下分別展開介紹:

序號 文章名 組件名
1 startActivity啟動過程分析 Activity
2 簡述Activity生命周期 Activity
3 startService啟動過程分析 Service
4 bindService啟動過程分析 Service
5 以Binder視角來看Service啟動 Service
6 Android Broadcast廣播機(jī)制分析 Broadcast
7 理解ContentProvider原理 ContentProvider
8 ContentProvider引用計數(shù) ContentProvider
9 Activity與Service生命周期 Activity&&Service

4.5 圖形系統(tǒng)系列
圖形也是整個系統(tǒng)非常復(fù)雜且重要的一個系列绍刮,涉及WindowManager,SurfaceFlinger.

序號 文章名 類別
1 WindowManager啟動篇 Window
2 WMS之啟動窗口篇 Window
3 以Window視角來看startActivity Window
4 Android圖形系統(tǒng)概述 SurfaceFlinger
5 SurfaceFlinger啟動篇 SurfaceFlinger
6 SurfaceFlinger繪圖篇 SurfaceFlinger
7 Choreographer原理 Choreographer

4.6 系統(tǒng)服務(wù)篇
再則就是在整個架構(gòu)中有大量的服務(wù)温圆,都是基于Binder來交互的挨摸,計劃針對部分核心服務(wù)來重點(diǎn)分析:
系統(tǒng)服務(wù)的注冊過程, 見Android系統(tǒng)服務(wù)的注冊方式
Android服務(wù)篇-ActivityManagerServiceAMS啟動過程(一)
更多組件篇[見小節(jié)4.3]

Input系統(tǒng)Input系統(tǒng)—啟動篇
Input系統(tǒng)—InputReader線程
Input系統(tǒng)—InputDispatcher線程
Input系統(tǒng)—UI線程
Input系統(tǒng)—進(jìn)程交互
Input系統(tǒng)—ANR原理分析

Android服務(wù)篇-PackageManagerServicePackageManager啟動篇
Installd守護(hù)進(jìn)程

Android服務(wù)篇-BatteryServiceAndroid耗電統(tǒng)計算法

Android服務(wù)篇-PowerManagerService
Android服務(wù)篇-DropBoxManagerServiceDropBoxManager啟動篇

Android多用戶服務(wù)-UserManagerService多用戶管理UserManager

更多服務(wù)介紹, 敬請期待…

4.7 內(nèi)存&&存儲篇
內(nèi)存篇Android LowMemoryKiller原理分析
Linux內(nèi)存管理
Android內(nèi)存分析命令

存儲篇Android存儲系統(tǒng)之源碼篇
Android存儲系統(tǒng)之架構(gòu)篇

Linux驅(qū)動篇敬請期待

dalvik/artART虛擬機(jī)之Trace原理

4.8 工具篇
最后孩革,說說Android相關(guān)的一些常用命令和工具以及調(diào)試手段.

序號 文章名 類別
1 理解Android編譯命令 build
2 性能工具Systrace systrace
3 Android內(nèi)存分析命令 Memory
4 ps進(jìn)程命令 Process
5 Am命令用法 Am
6 Pm命令用法 Pm
7 調(diào)試系列1:bugreport源碼篇 bugreport
8 調(diào)試系列2:bugreport實戰(zhàn)篇 bugreport
9 dumpsys命令用法 dumpsys

計劃: 后續(xù)持續(xù)新增和完善整個大綱,不限于進(jìn)程得运、內(nèi)存膝蜈、IO、系統(tǒng)服務(wù)框架熔掺,整體架構(gòu)以及各種系統(tǒng)分析實戰(zhàn)等文章饱搏。 博客會持續(xù)更新,各個擊破置逻,本文最近更新時間點(diǎn): 2017.03.18
.
說明:博主水平和精力有限,沒有大量的時間反復(fù)校驗文章,目前只是初稿驮配,后續(xù)會不斷整理和完善每一篇文章桃熄。 另外,如果您發(fā)現(xiàn)文章邏輯恨锚、文字或表述存在錯誤宇驾,還望海涵,歡迎留言指正猴伶、或郵件gityuan@gmail.com课舍,或微博反饋塌西,謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末筝尾,一起剝皮案震驚了整個濱河市捡需,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌筹淫,老刑警劉巖栖忠,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贸街,居然都是意外死亡庵寞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門薛匪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捐川,“玉大人,你說我怎么就攤上這事逸尖」帕ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵娇跟,是天一觀的道長岩齿。 經(jīng)常有香客問我,道長苞俘,這世上最難降的妖魔是什么盹沈? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮吃谣,結(jié)果婚禮上乞封,老公的妹妹穿的比我還像新娘。我一直安慰自己岗憋,他們只是感情好肃晚,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仔戈,像睡著了一般关串。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上监徘,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天晋修,我揣著相機(jī)與錄音耐量,去河邊找鬼。 笑死趴拧,一個胖子當(dāng)著我的面吹牛溅漾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播著榴,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼脑又,長吁一口氣:“原來是場噩夢啊……” “哼暮胧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起问麸,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎严卖,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體来颤,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡稠肘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年项阴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鲁冯。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡薯演,死狀恐怖秧了,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情验毡,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布璃氢,位于F島的核電站狮辽,受9級特大地震影響巢寡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜椰苟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一抑月、第九天 我趴在偏房一處隱蔽的房頂上張望舆蝴。 院中可真熱鬧,春花似錦层皱、人聲如沸赠潦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽方淤。三九已至,卻和暖如春你踩,著一層夾襖步出監(jiān)牢的瞬間讳苦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工膝藕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芭挽,地道東北人蝗肪。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像辛馆,于是被迫代替她去往敵國和親豁延。 傳聞我的和親對象是個殘疾皇子倔韭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

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