2017常見(jiàn)android面試題

介紹自己負(fù)責(zé)的部分,如何實(shí)現(xiàn)的。

框架的搭建
排查問(wèn)題以及結(jié)解決方式
兼容性保證
性能優(yōu)化
上線之后模塊導(dǎo)致crash的比例

自定義view viewGroup

這個(gè)就是約定的幾個(gè)方法,onMeasure,onLayout,onDraw,measure,layout,draw
同時(shí)注意寫方法的調(diào)用時(shí)機(jī)以及區(qū)別,比如onMeasure是個(gè)模版方法是在measure下調(diào)用的,這個(gè)方法在viewGroup里面,
自定義的這些就已經(jīng)足夠了,如果還擴(kuò)展一些更新問(wèn)題,子線程能不能更新,是可以的,在ViewRootImpl沒(méi)創(chuàng)建之前可以更新,不同sdk這個(gè)類可能名字不一樣。

1.自定義屬性
2.onLayout(Viewgroup)
3.onMesure
4.onDraw
5.交互:onIntercepterTouchEvent()onTouchEvent()

activity的啟動(dòng)流程

這個(gè)肯定不是說(shuō)activity的生命周期,是啟動(dòng)加載過(guò)程,大致說(shuō)下流程,具體的要自己看代碼了,大致過(guò)程有:
這里可能分好幾種情況,其實(shí)都差不很多,這里就說(shuō)一種情況,startActivity這個(gè)怎么啟動(dòng)Activity的,
startActivity->ActivityManagerService->ActivityThread->Activity,大概參與就這幾個(gè)核心類,里面經(jīng)過(guò)了兩層binder通信,最后路由到IApplicationThread,然后到ActivityThread中的H消息隊(duì)列中啟動(dòng)Activity,細(xì)節(jié)很多,可以在評(píng)論詢問(wèn)。

從桌面點(diǎn)擊到activity啟動(dòng)的過(guò)程

  • 1.Launcher線程捕獲onclick的點(diǎn)擊事件,調(diào)用Launcher.startActivitySafely,進(jìn)一步調(diào)用Launcher.startActivity,最后調(diào)用父類Activity的startActivity。
  • 2.Activity和ActivityManagerService交互,引入Instrumentation,將啟動(dòng)請(qǐng)求交給Instrumentation,調(diào)用Instrumentation.execStartActivity。
  • 3.調(diào)用ActivityManagerService的startActivity方法,這里做了進(jìn)程切換(具體過(guò)程請(qǐng)查看源碼)。
  • 4.開(kāi)啟Activity,
事件傳遞及滑動(dòng)沖突的處理

事件傳遞理解成責(zé)任鏈?zhǔn)秸{(diào)用就好,也就是從最內(nèi)層到外層時(shí)間委派,如果事件consume了,那么就給這個(gè)view處理,不然從外向內(nèi)冒泡,
沖突處理舉個(gè)實(shí)例就好,比如SlideMenu與banner或者ListView與Scrollview的沖突等等,說(shuō)出基本思路就行,這些解決一般都是重寫那幾個(gè)事件方法,然后各種判斷就好

插件化(activity如何加載及資源處理)

Activity使用占坑hook加載,也可以使用靜態(tài)代理,靜態(tài)代理就需要自定義classloader,記住這個(gè)加載模式就行,再多細(xì)節(jié)在評(píng)論回復(fù)吧
,資源處理就是assetmanager的創(chuàng)建,然后資源沖突處理,簡(jiǎn)單的可以構(gòu)建多個(gè)assetmanager就沒(méi)有沖突問(wèn)題,應(yīng)為隔離了,如果使用一個(gè)那么
打包aapt定制一下就行,還有很多細(xì)節(jié),在評(píng)論回復(fù)吧,說(shuō)不完了。

調(diào)用onCreate方法熱補(bǔ)丁原因:

因?yàn)橐粋€(gè)dvm中存儲(chǔ)方法id用的是short類型,導(dǎo)致dex中方法不能超過(guò)65536個(gè)原理:
將編譯好的class文件拆分打包成兩個(gè)dex,繞過(guò)dex方法數(shù)量的限制以及安裝時(shí)的檢查,在運(yùn)行時(shí)再動(dòng)態(tài)加載第二個(gè)dex文件中。使用Dexclassloader。

動(dòng)態(tài)加載(也叫插件化技術(shù))動(dòng)態(tài)加載主要解決3個(gè)技術(shù)問(wèn)題:

  • 1,使用ClassLoader加載類。
  • 2,資源訪問(wèn)。
  • 3,生命周期管理。

參考
1、Android動(dòng)態(tài)加載學(xué)習(xí)總結(jié)(一):類加載

2、ZeusPlugin:Android App插件補(bǔ)丁實(shí)踐
3、Android 插件原理解析——Hook機(jī)制之AMS&PMS
4、Android Hotfix 方案——Amigo 源碼解讀
5、Android Hotfix 方案——Amigo 源碼解讀
6、插件化由理論到實(shí)踐【更新于2016年9月3日】

內(nèi)存優(yōu)化 ,如何避免oom

內(nèi)存優(yōu)化太多要說(shuō)的了,有套路的回答,基本就是避免跟gc配合好工作.
比如:盡量復(fù)用對(duì)象,處理無(wú)用對(duì)象,避免內(nèi)存泄漏,壓縮對(duì)象等等.
盡量將大對(duì)象特殊處理,比如bitmap占用內(nèi)存較多,可以jni層與java層配合一起,大小壓縮,質(zhì)量壓縮,imsimplesize的大小定義,規(guī)范等等,程序中有內(nèi)存管理模塊,避免內(nèi)存壓力大的時(shí)候
,能夠釋放內(nèi)存,避免oom發(fā)生的幾率,還有很多方面,在評(píng)論回復(fù)吧。

內(nèi)存泄漏如何處理及如何排查

內(nèi)存泄漏最大的問(wèn)題就是無(wú)用對(duì)象常駐內(nèi)存,導(dǎo)致內(nèi)存壓力很大,最后可能導(dǎo)致oom發(fā)生。

盡量將對(duì)象生命周期可以在控制的能力之內(nèi),也很多場(chǎng)景,比如:context 除了特殊情況用activity,其他我們沒(méi)理由不用application。
排查導(dǎo)出堆空間,然后mat分析,程序里面用leackcanary定位。

handler問(wèn)題

這個(gè)需要回復(fù)兩個(gè)基本的,首先handler的創(chuàng)建需要loop,loop怎么創(chuàng)建的,同時(shí)這個(gè)里面怎么保證loop線程安全的,還有就是消息如何分發(fā)的,也就是消息發(fā)送到接受的流程,
還有callback對(duì)消息處理的影響,這些足夠了,還可以說(shuō)可以跨進(jìn)程,這樣就更棒了,具體的在回復(fù)說(shuō),太多了。

圖片加載用的什么以及原理

圖片加載的太多了,說(shuō)個(gè)自己非常熟悉的就行,不要給自己挖坑,都懂的,比如你熟悉uil,那就說(shuō)具體的加載過(guò)程,
套路都差不多,都是創(chuàng)建圖片task,先從緩存取出來(lái),取不到就去網(wǎng)絡(luò)下載,下載完之后,同時(shí)緩存起來(lái),這里需要說(shuō)下,線程池,隊(duì)列,pause,resume的具體細(xì)節(jié),比如跟view,activity的綁定關(guān)系。回復(fù)具體說(shuō),也很多.

從一堆數(shù)據(jù)里怎么查找最大的n個(gè)數(shù)

這個(gè)用歸并排序,或者直接快排,沒(méi)啥還說(shuō)的。不會(huì)的自己google看算法,算法后面我會(huì)寫出來(lái)到文章里面。

快速排序

基本思想挖坑,分而治之,按照這個(gè)思路看代碼就行

字符串匹配

這個(gè)kmp算法,或者最基本的吧,不考慮時(shí)間,空間復(fù)雜度的條件下,但是不要說(shuō)這個(gè),太low了點(diǎn)。其實(shí)這些算法背下來(lái)就好,不是業(yè)務(wù)場(chǎng)景的,意義不大,但是必須要會(huì),不然吃虧了


熱點(diǎn)
如何保證Service不被殺死 Android 進(jìn)程不死?

從3個(gè)層面入手:

A.提供進(jìn)程優(yōu)先級(jí),降低進(jìn)程被殺死的概率

  • 方法一:監(jiān)控手機(jī)鎖屏解鎖事件,在屏幕鎖屏?xí)r啟動(dòng)1個(gè)像素的 Activity,在用戶解鎖時(shí)將 Activity 銷毀掉。
  • 方法二:?jiǎn)?dòng)前臺(tái)service。
  • 方法三:提升service優(yōu)先級(jí):在AndroidManifest.xml文件中對(duì)于intent-filter可以通過(guò)

B. 在進(jìn)程被殺死后,進(jìn)行拉活。

  • 方法一:注冊(cè)高頻率廣播接收器,喚起進(jìn)程。
    如網(wǎng)絡(luò)變化,解鎖屏幕,開(kāi)機(jī)等
  • 方法二:雙進(jìn)程相互喚起。
  • 方法三:依靠系統(tǒng)喚起。
  • 方法四:onDestroy方法里重啟service:service +broadcast 方式,就是當(dāng)service走ondestory的時(shí)候,發(fā)送一個(gè)自定義的廣播,當(dāng)收到廣播的時(shí)候,重新啟動(dòng)service;

C. 依靠第三方根據(jù)終端不同。

在小米手機(jī)(包括 MIUI)接入小米推送、華為手機(jī)接入華為推送;
其他手機(jī)可以考慮接入騰訊信鴿或極光推送與小米推送做 A/B Test。

參考博客:Android 進(jìn)程保活招式大全
Activity、Application以及BroadcastReceiver生命周期
http://www.lxweimin.com/p/fcac1a8437ba

ButterKnife原理

ButterKnife對(duì)性能的影響很小,因?yàn)闆](méi)有使用使用反射,而是使用的Annotation Processing Tool(APT),注解處理器,javac中用于編譯時(shí)掃描和解析Java注解的工具。

在編譯階段執(zhí)行的,它的原理就是讀入Java源代碼,解析注解,然后生成新的Java代碼。
新生成的Java代碼最后被編譯成Java字節(jié)碼,注解解析器不能改變讀入的Java 類,比如不能加入或刪除Java方法。

Android6.0新特性

大量漂亮流暢的動(dòng)畫支持快速充電的切換支持文件夾拖拽應(yīng)用相機(jī)新增專業(yè)模式

Android7.0新特性

分屏多任務(wù)增強(qiáng)的Java8語(yǔ)言模式夜間模式

android中有哪幾種解析xml的類,官方推薦哪種?以及它們的原理和區(qū)別
DOM解析
優(yōu)點(diǎn):

1.XML樹(shù)在內(nèi)存中完整存儲(chǔ),因此可以直接修改其數(shù)據(jù)和結(jié)構(gòu).

2.可以通過(guò)該解析器隨時(shí)訪問(wèn)XML樹(shù)中的任何一個(gè)節(jié)點(diǎn).

3.DOM解析器的API在使用上也相對(duì)比較簡(jiǎn)單.

缺點(diǎn):

如果XML文檔體積比較大時(shí),將文檔讀入內(nèi)存是非常消耗系統(tǒng)資源的.

使用場(chǎng)景:

DOM 是用與平臺(tái)和語(yǔ)言無(wú)關(guān)的方式表示 XML 文檔的官方 W3C 標(biāo)準(zhǔn).
DOM 是以層次結(jié)構(gòu)組織的節(jié)點(diǎn)的集合.
這個(gè)層次結(jié)構(gòu)允許開(kāi)發(fā)人員在樹(shù)中尋找特定信息.分析該結(jié)構(gòu)通常需要加載整個(gè)文檔和構(gòu)造層次結(jié)構(gòu),然后才能進(jìn)行任何工作.DOM是基于對(duì)象層次結(jié)構(gòu)的.

SAX解析
優(yōu)點(diǎn):

SAX 對(duì)內(nèi)存的要求比較低,因?yàn)樗岄_(kāi)發(fā)人員自己來(lái)決定所要處理的標(biāo)簽.
特別是當(dāng)開(kāi)發(fā)人員只需要處理文檔中所包含的部分?jǐn)?shù)據(jù)時(shí),SAX 這種擴(kuò)展能力得到了更好的體現(xiàn).

缺點(diǎn):

用SAX方式進(jìn)行XML解析時(shí),需要順序執(zhí)行,所以很難訪問(wèn)到同一文檔中的不同數(shù)據(jù).
此外,在基于該方式的解析編碼過(guò)程也相對(duì)復(fù)雜.

使用場(chǎng)景:

對(duì)于含有數(shù)據(jù)量十分巨大,而又不用對(duì)文檔的所有數(shù)據(jù)進(jìn)行遍歷或者分析的時(shí)候,使用該方法十分有效.該方法不用將整個(gè)文檔讀入內(nèi)存,而只需讀取到程序所需的文檔標(biāo)簽處即可.

Xmlpull解析

android SDK提供了xmlpull api,xmlpull和sax類似,是基于流(stream)操作文件,然后根據(jù)節(jié)點(diǎn)事件回調(diào)開(kāi)發(fā)者編寫的處理程序.

因?yàn)槭腔诹鞯奶幚?因此xmlpull和sax都比較節(jié)約內(nèi)存資源,不會(huì)象dom那樣要把所有節(jié)點(diǎn)以對(duì)橡樹(shù)的形式展現(xiàn)在內(nèi)存中.xmlpull比sax更簡(jiǎn)明,而且不需要掃描完整個(gè)流.

引起內(nèi)存泄漏的情況
  • 對(duì)于使用了BraodcastReceiver,ContentObserver,F(xiàn)ile,游標(biāo) Cursor,Stream,Bitmap等資源的使用,應(yīng)該在Activity銷毀時(shí)及時(shí)關(guān)閉或者注銷。
  • 靜態(tài)內(nèi)部類持有外部成員變量(或context):可以使用弱引用或使用ApplicationContext。
  • 內(nèi)部類持有外部類引用,異步任務(wù)中,持有外部成員變量。
  • 集合中沒(méi)用的對(duì)象沒(méi)有及時(shí)remove。不用的對(duì)象及時(shí)釋放,如使用完Bitmap后掉用recycle(),再賦null。
  • handler引起的內(nèi)存泄漏,MessageQueue里的消息如果在activity銷毀時(shí)沒(méi)有處理完,就會(huì)引起內(nèi)存的泄漏,可以使用弱引用解決。
  • 設(shè)置過(guò)的監(jiān)聽(tīng)不用時(shí),及時(shí)移除。如在Destroy時(shí)及時(shí)remove。尤其以addListener開(kāi)頭的,在Destroy中都需要remove。

activity泄漏可以使用LeakCanary。

Android 內(nèi)存溢出解決方案(OOM) 整理總結(jié)

在內(nèi)存引用上做些處理,常用的有軟引用、弱引用 在內(nèi)存中加載圖片時(shí)直接在內(nèi)存中作處理,如:邊界壓縮 動(dòng)態(tài)回收內(nèi)存 優(yōu)化Dalvik虛擬機(jī)的堆內(nèi)存分配 自定義堆內(nèi)存大小。

如果圖片很大,比如他們的占用內(nèi)存算下來(lái)就直接OOM了,那么我們肯定不能直接加載它。解決主法還是有很多的,系統(tǒng)也給我們提供了一個(gè)類BitmapRegionDecoder,可以用來(lái)分塊加載圖片。

Activity/Window/View三者的差別?

Activity像一個(gè)工匠(控制單元),Window像窗戶(承載模型),View像窗花(顯示視圖) LayoutInflater像剪刀,Xml配置像窗花圖紙。

JVM 和Dalvik虛擬機(jī)的區(qū)別
  • JVM:.java -> javac -> .class -> jar -> .jar架構(gòu): 堆和棧的架構(gòu).
  • DVM:.java -> javac -> .class -> dx.bat -> .dex架構(gòu): 寄存器(cpu上的一塊高速緩存)
怎么考慮數(shù)據(jù)傳輸?shù)陌踩?

如果應(yīng)用對(duì)傳輸?shù)臄?shù)據(jù)沒(méi)有任何安全措施,攻擊者設(shè)置的釣魚(yú)網(wǎng)絡(luò)中更改DNS服務(wù)器。這臺(tái)服務(wù)器可以獲取用戶信息,或充當(dāng)中間人與原服務(wù)器交換數(shù)據(jù)。在SSL/TLS通信中,客戶端通過(guò)數(shù)字證書判斷服務(wù)器是否可信,并采用證書的公鑰與服務(wù)器進(jìn)行加密通信。

ART和Dalvik區(qū)別?
  • art上應(yīng)用啟動(dòng)快,運(yùn)行快,但是耗費(fèi)更多存儲(chǔ)空間,安裝時(shí)間長(zhǎng),總的來(lái)說(shuō)ART的功效就是”空間換時(shí)間”。
    ART: Ahead of TimeDalvik: Just in Time什么是Dalvik:Dalvik是Google公司自己設(shè)計(jì)用于Android平臺(tái)的Java虛擬機(jī)。
  • Dalvik虛擬機(jī)是Google等廠商合作開(kāi)發(fā)的Android移動(dòng)設(shè)備平臺(tái)的核心組成部分之一,它可以支持已轉(zhuǎn)換為.dex(即Dalvik Executable)格式的Java應(yīng)用程序的運(yùn)行,.dex格式是專為Dalvik應(yīng)用設(shè)計(jì)的一種壓縮格式,適合內(nèi)存和處理器速度有限的系統(tǒng)。
    Dalvik經(jīng)過(guò)優(yōu)化,允許在有限的內(nèi)存中同時(shí)運(yùn)行多個(gè)虛擬機(jī)的實(shí)例,并且每一個(gè)Dalvik應(yīng)用作為獨(dú)立的Linux進(jìn)程執(zhí)行。獨(dú)立的進(jìn)程可以防止在虛擬機(jī)崩潰的時(shí)候所有程序都被關(guān)閉。
什么是ART?

Android操作系統(tǒng)已經(jīng)成熟,Google的Android團(tuán)隊(duì)開(kāi)始將注意力轉(zhuǎn)向一些底層組件,其中之一是負(fù)責(zé)應(yīng)用程序運(yùn)行的Dalvik運(yùn)行時(shí)。Google開(kāi)發(fā)者已經(jīng)花了兩年時(shí)間開(kāi)發(fā)更快執(zhí)行效率更高更省電的替代ART運(yùn)行時(shí)。ART代表Android Runtime,其處理應(yīng)用程序執(zhí)行的方式完全不同于Dalvik.

Dalvik是依靠一個(gè)Just-In-Time(JIT)編譯器去解釋字節(jié)碼。開(kāi)發(fā)者編譯后的應(yīng)用代碼需要通過(guò)一個(gè)解釋器在用戶的設(shè)備上運(yùn)行,這一機(jī)制并不高效,但讓應(yīng)用能更容易在不同硬件和架構(gòu)上運(yùn)行。ART則完全改變了這套做法,在應(yīng)用安裝的時(shí)候就預(yù)編譯字節(jié)碼到機(jī)器語(yǔ)言,這一機(jī)制叫Ahead-Of-Time(AOT)編譯。在移除解釋代碼這一過(guò)程后,應(yīng)用程序執(zhí)行將更有效率,啟動(dòng)更快。

ART優(yōu)點(diǎn):
系統(tǒng)性能的顯著提升應(yīng)用啟動(dòng)更快、運(yùn)行更快、體驗(yàn)更流暢、觸感反饋更及時(shí)。更長(zhǎng)的電池續(xù)航能力支持更低的硬件

ART缺點(diǎn):
更大的存儲(chǔ)空間占用,可能會(huì)增加10%-20%更長(zhǎng)的應(yīng)用安裝時(shí)間.

JavaScript調(diào)用Java方法?

需要使用WebView.addJavascriptInterface方法設(shè)置JavaScript調(diào)用的Java方法,代碼如下:

webView.addJavascriptInterface(new Object(){    
  //JavaScript調(diào)用的方法    
  public String process(String value)    {        
    //處理代碼        
    return result;    
  }
}, "demo");      

//demo是Java對(duì)象映射到JavaScript中的對(duì)象名
可以使用下面的JavaScript代碼調(diào)用process方法,代碼如下:

<script language="javascript">    function search()    {        
  //調(diào)用searchWord方法        
  result.innerHTML = "<font color='red'>" + window.demo.process('data') + "</font>";    
}
SurfaceView和View的最本質(zhì)的區(qū)別?

SurfaceView是在一個(gè)新起的單獨(dú)線程中可以重新繪制畫面,而view必須在UI的主線程中更新畫面。
在UI的主線程中更新畫面可能會(huì)引發(fā)問(wèn)題,比如你更新的時(shí)間過(guò)長(zhǎng),那么你的主UI線程就會(huì)被你正在畫的函數(shù)阻塞。
那么將無(wú)法響應(yīng)按鍵、觸屏等消息。
當(dāng)使用SurfaceView由于是在新的線程中更新畫面所以不會(huì)阻塞你的UI主線程。
但這也帶來(lái)了另外一個(gè)問(wèn)題,就是事件同步。比如你觸屏了一下,你需要SurfaceView中thread處理,一般就需要有一個(gè)event queue的設(shè)計(jì)來(lái)保存touchevent,這會(huì)稍稍復(fù)雜一點(diǎn),因?yàn)樯婕暗骄€程安全。

如何避免UI線程盡量只做跟UI相關(guān)的工作?

耗時(shí)的操作(比如數(shù)據(jù)庫(kù)操作,I/O,連接網(wǎng)絡(luò)或者別的有可能阻塞UI線程的操作)把它放在單獨(dú)的線程處理盡量用Handler來(lái)處理UIthread和別的thread之間的交互.使用Thread或者HandlerThread時(shí),調(diào)用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)設(shè)置優(yōu)先級(jí),否則仍然會(huì)降低程序響應(yīng),因?yàn)槟J(rèn)Thread的優(yōu)先級(jí)和主線程相同。使用Handler處理工作線程結(jié)果,而不是使用Thread.wait()或者Thread.sleep()來(lái)阻塞主線程。

Activity的onCreate和onResume回調(diào)中盡量避免耗時(shí)的代碼BroadcastReceiver中onReceive代碼也要盡量減少耗時(shí),建議使用IntentService處理。

性能優(yōu)化
  • 界面優(yōu)化太多重疊的背景(overdraw)這個(gè)問(wèn)題其實(shí)最容易解決,建議就是檢查你在布局和代碼中設(shè)置的背景,有些背景是隱藏在底下的,它永遠(yuǎn)不可能顯示出來(lái),這種沒(méi)必要的背景一定要移除,因?yàn)樗芸赡軙?huì)嚴(yán)重影響到app的性能。如果采用的是selector的背景,將normal狀態(tài)的color設(shè)置為”@android:color/transparent”,也同樣可以解決問(wèn)題。
  • 太多重疊的View第一個(gè)建議是 :使用ViewStub來(lái)加載一些不常用的布局,它是一個(gè)輕量級(jí)且默認(rèn)是不可見(jiàn)的視圖,可以動(dòng)態(tài)的加載一個(gè)布局,只要你用到這個(gè)重疊著的View的時(shí)候才加載,推遲加載的時(shí)間。
  • 第二個(gè)建議是:如果使用了類似Viewpager+Fragment這樣的組合或者有多個(gè)Fragment在一個(gè)界面上,需要控制Fragment的顯示和隱藏,盡量使用動(dòng)態(tài)的Inflation view,它的性能要比SetVisibility好。
  • 復(fù)雜的Layout層級(jí)這里的建議比較多一些,首先推薦使用Android提供的布局工具Hierarchy Viewer來(lái)檢查和優(yōu)化布局。
    第一個(gè)建議是:如果嵌套的線性布局加深了布局層次,可以使用相對(duì)布局來(lái)取代。
    第二個(gè)建議是:用標(biāo)簽來(lái)合并布局。
    第三個(gè)建議是:用標(biāo)簽來(lái)重用布局,抽取通用的布局可以讓布局的邏輯更清晰明了。
    記住,這些建議的最終目的都是使得你的Layout在Hierarchy Viewer里變得寬而淺,而不是窄而深。
總結(jié):
  • 可以考慮多使用merge和include,ViewStub。
  • 盡量使布局淺平,根布局盡量少使用RelactivityLayout,因?yàn)镽elactivityLayout每次需要測(cè)量2次。
  • 內(nèi)存優(yōu)化核心思想:減少內(nèi)存使用,能不new的不new,能少分配的少分配。因?yàn)榉峙涓嗟膬?nèi)存就意味著發(fā)生更多的GC,每次觸發(fā)GC都會(huì)占用CPU時(shí)間,影響性能。
  • 集合優(yōu)化:Android提供了一系列優(yōu)化過(guò)后的數(shù)據(jù)集合工具類,如SparseArray、SparseBooleanArray、LongSparseArray,使用這些API可以讓我們的程序更加高效。
  • HashMap工具類會(huì)相對(duì)比較低效,因?yàn)樗枰獮槊恳粋€(gè)鍵值對(duì)都提供一個(gè)對(duì)象入口,而SparseArray就避免掉了基本數(shù)據(jù)類型轉(zhuǎn)換成對(duì)象數(shù)據(jù)類型的時(shí)間。
  • Bitmap優(yōu)化:讀取一個(gè)Bitmap圖片的時(shí)候,千萬(wàn)不要去加載不需要的分辨率。可以壓縮圖片等操作。
  • 盡量避免使用依賴注入框架。
  • 避免創(chuàng)作不必要的對(duì)象:字符串拼接使用StringBuffer,StringBuilder。
  • onDraw方法里面不要執(zhí)行對(duì)象的創(chuàng)建.重寫onTrimMemory,根據(jù)傳入的參數(shù),進(jìn)行內(nèi)存釋放。
  • 使用static final 優(yōu)化成員變量。
  • 移動(dòng)端獲取網(wǎng)絡(luò)數(shù)據(jù)優(yōu)化的幾個(gè)點(diǎn)連接復(fù)用:
    節(jié)省連接建立時(shí)間,如開(kāi)啟 keep-alive。對(duì)于Android來(lái)說(shuō)默認(rèn)情況下HttpURLConnection和HttpClient都開(kāi)啟了keep-alive。只是2.2之前HttpURLConnection存在影響連接池的Bug,具體可見(jiàn):Android HttpURLConnection及HttpClient選擇請(qǐng)求合并:即將多個(gè)請(qǐng)求合并為一個(gè)進(jìn)行請(qǐng)求,比較常見(jiàn)的就是網(wǎng)頁(yè)中的CSS Image Sprites。如果某個(gè)頁(yè)面內(nèi)請(qǐng)求過(guò)多,也可以考慮做一定的請(qǐng)求合并。
  • 減少請(qǐng)求數(shù)據(jù)的大小:對(duì)于post請(qǐng)求,body可以做gzip壓縮的,header也可以做數(shù)據(jù)壓縮(不過(guò)只支持http 2.0)。返回?cái)?shù)據(jù)的body也可以做gzip壓縮,body數(shù)據(jù)體積可以縮小到原來(lái)的30%左右。(也可以考慮壓縮返回的json數(shù)據(jù)的key數(shù)據(jù)的體積,尤其是針對(duì)返回?cái)?shù)據(jù)格式變化不大的情況,支付寶聊天返回的數(shù)據(jù)用到了)根據(jù)用戶的當(dāng)前的網(wǎng)絡(luò)質(zhì)量來(lái)判斷下載什么質(zhì)量的圖片(電商用的比較多).

另外伸手黨系列

Android View 簡(jiǎn)介
View的簡(jiǎn)介
那些你應(yīng)該知道卻不一定知道的——View坐標(biāo)分析匯總
Android LayoutInflater原理分析,帶你一步步深入了解View(一)
Android視圖繪制流程完全解析,帶你一步步深入了解View(二)
Android應(yīng)用坐標(biāo)系統(tǒng)全面詳解
Android應(yīng)用setContentView與LayoutInflater加載解析機(jī)制源碼分析
Android中RelativeLayout和LinearLayout性能分析
Android群英傳筆記——第六章:Android繪圖機(jī)制與處理技巧
Android View繪制過(guò)程
Android 源碼解析 之 setContentView
Android應(yīng)用層View繪制流程與源碼分析

Android View事件體系
郭神的兩篇:
Android事件分發(fā)機(jī)制完全解析,帶你從源碼的角度徹底理解(上)
Android事件分發(fā)機(jī)制完全解析,帶你從源碼的角度徹底理解(下)

鴻神的兩篇:
Android View 事件分發(fā)機(jī)制 源碼解析 (上)Android ViewGroup事件分發(fā)機(jī)制
其它
可能是講解Android事件分發(fā)最好的文章
Andriod 從源碼的角度詳解View,ViewGroup的Touch事件的分發(fā)機(jī)制
徹底理解View事件體系!
Android觸摸屏事件派發(fā)機(jī)制詳解與源碼分析一(View篇)
Android觸摸屏事件派發(fā)機(jī)制詳解與源碼分析二(ViewGroup篇)
Android觸摸屏事件派發(fā)機(jī)制詳解與源碼分析三(Activity篇)
Android View事件機(jī)制 21問(wèn)21答
Android源碼解析(二十六)-->截屏事件流程
Android源碼解析(二十七)-->HOME事件流程
自定義View系列教程06--詳解View的Touch事件處理
自定義View系列教程07--詳解ViewGroup分發(fā)Touch事件
自定義View系列教程08--滑動(dòng)沖突的產(chǎn)生及其處理
圖解Android事件傳遞之View篇
圖解Android事件傳遞之ViewGroup篇
圖解 Android 事件分發(fā)機(jī)制
Android MotionEvent詳解
Android View和ViewGroup事件分發(fā)機(jī)制源碼分析

其它事件
Android源碼解析(二十八)-->電源開(kāi)關(guān)機(jī)按鍵事件流程
Android源碼解析(二十九)-->應(yīng)用程序返回按鍵執(zhí)行流程
Android源碼解析(三十)-->觸摸事件分發(fā)流程
在Activity,Service,Window中監(jiān)聽(tīng)Home鍵和返回鍵的一些思考,如何把事件傳遞出來(lái)的做法!

Android Scroller
講解得很詳細(xì)
Android Scroll詳解(一):基礎(chǔ)知識(shí)
Android Scroll詳解(二):OverScroller實(shí)戰(zhàn)

Android Scroll詳解(一):基礎(chǔ)知識(shí)
Android MotionEvent詳解
Android Scroll詳解(三):Android 繪制過(guò)程詳解

Android Scroller完全解析,關(guān)于Scroller你所需知道的一切 --推薦(來(lái)自郭神)
Android NestedScrolling機(jī)制完全解析 帶你玩轉(zhuǎn)嵌套滑動(dòng) ---來(lái)自鴻神

Android 帶你從源碼的角度解析Scroller的滾動(dòng)實(shí)現(xiàn)原理
Android應(yīng)用開(kāi)發(fā)Scroller詳解及源碼淺析
Android群英傳筆記——第五章:Android Scroll分析
Android 對(duì)ScrollView滾動(dòng)監(jiān)聽(tīng),實(shí)現(xiàn)美團(tuán)、大眾點(diǎn)評(píng)的購(gòu)買懸浮效果

Android ViewDragHelper
Android應(yīng)用ViewDragHelper詳解及部分源碼淺析
ViewDragerHelper(一)認(rèn)識(shí)與簡(jiǎn)單實(shí)現(xiàn)
ViewDragerHelper(二)源碼簡(jiǎn)析
ViewDragerHelper(三)進(jìn)階使用

Android TouchHelper
ItemTouchHelper(一)認(rèn)識(shí)與實(shí)現(xiàn)
ItemTouchHelper(二)源碼簡(jiǎn)析

Android 自定義View
自定義View 基礎(chǔ)篇
Android自定義View的官方套路
Android 自定義View入門
細(xì)談Android 中的attributes 屬性標(biāo)志
Android 2D繪圖解析之 Canvas,Paint
Android應(yīng)用自定義View繪制方法手冊(cè)
Android應(yīng)用開(kāi)發(fā)之自定義View觸摸相關(guān)工具類全解
Android Xfermode 實(shí)戰(zhàn) 實(shí)現(xiàn)圓形、圓角圖片---來(lái)自鴻神
Android中自定義樣式與View的構(gòu)造函數(shù)中的第三個(gè)參數(shù)defStyle的意義
Android 面試題總結(jié)之Android 進(jìn)階

Android View學(xué)習(xí)筆記(一)View基礎(chǔ)知識(shí)
Android View學(xué)習(xí)筆記(二)事件分發(fā)機(jī)制
Android繪圖機(jī)制(一)——自定義View的基礎(chǔ)屬性和方法
Android繪圖機(jī)制(二)——自定義View繪制形, 圓形, 三角形, 扇形, 橢圓, 曲線,文字和圖片的坐標(biāo)講解
Android繪圖機(jī)制(三)——自定義View的實(shí)現(xiàn)方式以及半弧圓新控件

孫群自定義View系列
量算、布局及繪圖機(jī)制概述Android中View的量算、布局及繪圖機(jī)制
量算源碼解析Android中View的measure量算過(guò)程
布局源碼解析Android中View的layout布局過(guò)程
繪圖Android中Canvas繪圖基礎(chǔ)詳解(附源碼下載)Android中Canvas繪圖之PorterDuffXfermode使用及工作原理詳解Android中Canvas繪圖之Shader使用圖文詳解Android中Canvas繪圖之MaskFilter圖文詳解(附源碼下載)Android中GPU硬件加速控制及其在2D圖形繪制上的局限圖文詳解Andorid中用Shape定義GradientDrawable
觸摸事件Android中的MotionEventAndroid中TouchEvent觸摸事件機(jī)制
定義XML屬性Android中View自定義XML屬性詳解以及R.attr與R.styleable的區(qū)別

愛(ài)哥的自定義控件系統(tǒng)
自定義控件其實(shí)很簡(jiǎn)單1/12
自定義控件其實(shí)很簡(jiǎn)單1/6
自定義控件其實(shí)很簡(jiǎn)單1/4
自定義控件其實(shí)很簡(jiǎn)單1/3
自定義控件其實(shí)很簡(jiǎn)單5/12
自定義控件其實(shí)很簡(jiǎn)單1/2
自定義控件其實(shí)很簡(jiǎn)單7/12
自定義控件其實(shí)很簡(jiǎn)單2/3
自定義控件其實(shí)很簡(jiǎn)單3/4
Android事件分發(fā)完全解析之為什么是她
Android事件分發(fā)完全解析之事件從何而來(lái)

郭神的三篇
Android視圖繪制流程完全解析,帶你一步步深入了解View(二)Android視圖狀態(tài)及重繪流程分析,帶你一步步深入了解View(三)Android自定義View的實(shí)現(xiàn)方法,帶你一步步深入了解View(四)
GcsSloop的魔法世界
安卓自定義View基礎(chǔ) - 坐標(biāo)系
安卓自定義View基礎(chǔ) - 角度弧度
安卓自定義View基礎(chǔ) - 顏色
安卓自定義View進(jìn)階 - 分類和流程
安卓自定義View進(jìn)階 - Canvas之繪制圖形
安卓自定義View進(jìn)階 - Canvas之畫布操作
安卓自定義View進(jìn)階 - Canvas之圖片文字
安卓自定義View進(jìn)階 - Path之基本操作
安卓自定義View進(jìn)階 - Path之貝塞爾曲線
安卓自定義View進(jìn)階 - Path完結(jié)篇
安卓自定義View進(jìn)階 - PathMeasure
安卓自定義View進(jìn)階 - Matrix原理
安卓自定義View進(jìn)階 - Matrix詳解
安卓自定義View進(jìn)階 - Matrix Camera
安卓自定義View進(jìn)階 - 事件分發(fā)機(jī)制原理
安卓自定義View進(jìn)階 - 事件分發(fā)機(jī)制詳解
二十多行代碼畫太極

自定義View系列文章二
自定義View系列教程01–常用工具介紹
自定義View系列教程02–onMeasure源碼詳盡分析
自定義View系列教程03–onLayout源碼詳盡分析
自定義View系列教程04–Draw源碼分析及其實(shí)踐
自定義View系列教程05–示例分析
自定義View系列教程06–詳解View的Touch事件處理
自定義View系列教程07–詳解ViewGroup分發(fā)Touch事件
自定義View系列教程08–滑動(dòng)沖突的產(chǎn)生及其處理

自定義View系列文章三
自定義View時(shí),用到Paint Canvas的一些溫故,講講平時(shí)一些效果是怎么畫的(基礎(chǔ)篇 一)
自定義View時(shí),用到Paint Canvas的一些溫故,講講平時(shí)一些效果是怎么畫的(基礎(chǔ)篇 二,圖像遮蓋,Canvas靜態(tài)變化)
自定義View時(shí),用到Paint Canvas的一些溫故,只有想不到?jīng)]有做不到(實(shí)例 1,畫一個(gè)簡(jiǎn)單的Activity并且實(shí)現(xiàn)他能實(shí)現(xiàn)的)
自定義View時(shí),用到Paint Canvas的一些溫故,簡(jiǎn)單的幀動(dòng)畫(動(dòng)畫一 ,"掏糞男孩Gif"順便再提提onWindowFocusChanged)
自定義View時(shí),用到Paint Canvas的一些溫故,簡(jiǎn)單的View Animation(動(dòng)畫二,“大大姐”的簡(jiǎn)單變動(dòng))
自定義View時(shí),用到Paint Canvas的一些溫故,PropertyAnimation中的ObjectAnimator(動(dòng)畫三,“大大姐”的旋轉(zhuǎn)跳躍)
自定義View時(shí),用到Paint Canvas的一些溫故,PropertyAnimation中的ValueAnimator(動(dòng)畫四,“大大姐”的旋轉(zhuǎn)跳躍no.2)

自定義View系列四
View篇
Android坐標(biāo)系與View繪制流程
Canvas與ValueAnimator
View多行文本居中
Path圖形與邏輯運(yùn)算
PieChart扇形圖的實(shí)現(xiàn)
Path中的貝塞爾曲線
雷達(dá)圖(蜘蛛網(wǎng)圖)的實(shí)現(xiàn)

ViewGroup篇
View的彈性滑動(dòng)
View的invalidate傳遞與繪制流程分析
View的requestLayout傳遞與測(cè)量、布局流程分析
更簡(jiǎn)單的學(xué)習(xí)Android事件分發(fā)
Android事件分發(fā)機(jī)制源碼解析

自定義View小例子
Andorid自定義圓形漸變色進(jìn)度條的從實(shí)現(xiàn)到開(kāi)源
自定義FlowLayout實(shí)現(xiàn)標(biāo)簽快捷輸入框
自定義SwipeLayout實(shí)現(xiàn)側(cè)滑菜單
Android 自定義View (三) 圓環(huán)交替 等待效果
Android 自定義ViewGroup手把手教你實(shí)現(xiàn)ArcMenu
Android 自定義 HorizontalScrollView 打造再多圖片(控件)也不怕 OOM 的橫向滑動(dòng)效果
Android 高仿微信頭像截取 打造不一樣的自定義控件
一步步教你寫StepView(流程指示器)
打造浪漫的Android表白程序
Android自定義控件(狀態(tài)提示圖表)

Android Window and WindowManager
Window和WindowManager
理清Activity、View及Window之間關(guān)系
Android應(yīng)用Activity、Dialog、PopWindow、Toast窗口添加機(jī)制及源碼分析 ---推薦

Android 動(dòng)畫
Tween動(dòng)畫和補(bǔ)間動(dòng)畫
Android 動(dòng)畫學(xué)習(xí)筆記(一)補(bǔ)間動(dòng)畫(Tween)與幀動(dòng)畫(Frame)
android之動(dòng)畫常用方法
android 動(dòng)畫總結(jié)

屬性動(dòng)畫
郭神三篇
Android屬性動(dòng)畫完全解析(上),初識(shí)屬性動(dòng)畫的基本用法
Android屬性動(dòng)畫完全解析(中),ValueAnimator和ObjectAnimator的高級(jí)用法
Android屬性動(dòng)畫完全解析(下),Interpolator和ViewPropertyAnimator的用法

Android 屬性動(dòng)畫 源碼解析 深入了解其內(nèi)部實(shí)現(xiàn)

動(dòng)畫總結(jié)
Android應(yīng)用開(kāi)發(fā)之所有動(dòng)畫使用詳解
Android群英傳筆記——第七章:Android動(dòng)畫機(jī)制和使用技巧
實(shí)現(xiàn)頁(yè)面加載的變換和位移動(dòng)畫效果
探索安卓中有意義的動(dòng)畫!
Android Activity和Fragment的轉(zhuǎn)場(chǎng)動(dòng)畫
android 動(dòng)畫分類
Android Transition animations explanation with examples.

進(jìn)程保活
關(guān)于 Android 進(jìn)程保活,你所需要知道的一切
Android 進(jìn)程常駐(0)----MarsDaemon使用說(shuō)明
一種提高Android應(yīng)用進(jìn)程存活率新方法
Android 進(jìn)程保活招式大全
微信Android客戶端后臺(tái)保活經(jīng)驗(yàn)分享

熱修復(fù)
最全面的Android熱修復(fù)技術(shù)
Android熱補(bǔ)丁動(dòng)態(tài)修復(fù)實(shí)踐
Android產(chǎn)品研發(fā)(七)-->Apk熱修復(fù)

性能優(yōu)化
啟動(dòng)時(shí)間優(yōu)化
Android冷啟動(dòng)時(shí)間優(yōu)化
Android實(shí)現(xiàn)不重復(fù)啟動(dòng)APP的方法
給 App 提速:Android 性能優(yōu)化總結(jié)

內(nèi)存優(yōu)化
來(lái)自郭神的四篇
Android最佳性能實(shí)踐(一)——合理管理內(nèi)存
Android最佳性能實(shí)踐(二)——分析內(nèi)存的使用情況
Android最佳性能實(shí)踐(三)——高性能編碼優(yōu)化
Android最佳性能實(shí)踐(四)——布局優(yōu)化技巧

來(lái)自騰訊 胡凱(AndroidTraining中文版的作者) 10幾篇內(nèi)存優(yōu)化系列
Android性能優(yōu)化典范 - 第1季
Android性能優(yōu)化之渲染篇
Android性能優(yōu)化之運(yùn)算篇
Android性能優(yōu)化之內(nèi)存篇
Android性能優(yōu)化之電量篇
Android性能優(yōu)化典范 - 第2季
Android性能優(yōu)化典范 - 第3季
Android內(nèi)存優(yōu)化之OOM
Android性能優(yōu)化典范 - 第4季
Android性能優(yōu)化典范 - 第5季

來(lái)自 工匠若水
Android應(yīng)用開(kāi)發(fā)性能優(yōu)化完全分析

其它
MAT - Memory Analyzer Tool 使用進(jìn)階
Android性能優(yōu)化-App啟動(dòng)優(yōu)化
Android性能優(yōu)化-App后臺(tái)優(yōu)化
Android性能優(yōu)化-內(nèi)存優(yōu)化
Android性能優(yōu)化-減小APK大小
Android性能優(yōu)化-線程性能優(yōu)化
Android性能優(yōu)化-減小圖片下載大小

在Android開(kāi)發(fā)中,有哪些好的內(nèi)存優(yōu)化方式?如何避免 Out Of Memory(OOM) ?
Android 性能優(yōu)化之使用MAT分析內(nèi)存泄露問(wèn)題
【MDCC技術(shù)大咖秀】Android內(nèi)存優(yōu)化之OOM
使用新版Android Studio檢測(cè)內(nèi)存泄露和性能
[魅族Degao]Android客戶端性能優(yōu)化
應(yīng)用開(kāi)發(fā)進(jìn)階必經(jīng)之路之性能優(yōu)化(上)
應(yīng)用開(kāi)發(fā)進(jìn)階必經(jīng)之路之性能優(yōu)化(下)
Android布局性能優(yōu)化—從源碼角度看ViewStub延遲加載技術(shù)
Android性能優(yōu)化專欄
Android 性能優(yōu)化之使用MAT分析內(nèi)存泄露問(wèn)題

React Native開(kāi)發(fā)
江清清的技術(shù)專欄 ---專注移動(dòng)技術(shù)開(kāi)發(fā)(Android/IOS)、React Native源碼分析、React Native教程、React Native博客
屏幕適配
Android屏幕適配全攻略(最權(quán)威的官方適配指導(dǎo)) ---推薦
關(guān)于Android中圖片大小、內(nèi)存占用與drawable文件夾關(guān)系的研究與分析 ---推薦
Android開(kāi)發(fā):最全面、最易懂的Android屏幕適配解決方案---推薦
Android 屏幕適配方案
Android-屏幕適配全攻略(絕對(duì)詳細(xì))(一)
Android-屏幕適配全攻略(絕對(duì)詳細(xì))(二)
Android必知必會(huì)-App 常用圖標(biāo)尺寸規(guī)范匯總
Android官方提供的支持不同屏幕大小的全部方法
Android應(yīng)用如何支持屏幕多尺寸多分辨率問(wèn)題

Android 啟動(dòng)相關(guān)
Android啟動(dòng)過(guò)程圖解
Android源碼解析之(八)-->Zygote進(jìn)程啟動(dòng)流程
Android源碼解析之(九)-->SystemServer進(jìn)程啟動(dòng)流程
Android源碼解析之(十)-->Launcher啟動(dòng)流程
Android源碼解析之(十一)-->應(yīng)用進(jìn)程啟動(dòng)流程
Android源碼解析之(十二)-->系統(tǒng)啟動(dòng)并解析Manifest的流程

Android緩存
你應(yīng)該了解的 一些web緩存相關(guān)的概念.
Android DiskLruCache 源碼解析 硬盤緩存的絕佳方案---來(lái)自鴻神
Android DiskLruCache完全解析,硬盤緩存的最佳方案
Android照片墻完整版,完美結(jié)合LruCache和DiskLruCache
Android 緩存機(jī)制
Android源碼解析之(七)-->LruCache緩存類

Handler
Handler和他的小伙伴們(上)
Android 異步消息處理機(jī)制(Handler 、 Looper 、MessageQueue)源碼解析
Android HandlerThread 完全解析

NFC
Android NFC開(kāi)發(fā)(一)——初探NFC,了解當(dāng)前前沿技術(shù)
Android NFC開(kāi)發(fā)(二)——Android世界里的NFC所具備的條件以及使用方法
Android NFC技術(shù)(三)——初次開(kāi)發(fā)Android NFC你須知道NdefMessage和NdefRecord

傳感器
Android-關(guān)于傳感器你需要知道的

藍(lán)牙
Android藍(lán)牙API介紹
Android BLE與終端通信(一)——Android Bluetooth基礎(chǔ)API以及簡(jiǎn)單使用獲取本地藍(lán)牙名稱地址
Android BLE與終端通信(二)——Android Bluetooth基礎(chǔ)科普以及搜索藍(lán)牙設(shè)備顯示列表
Android BLE與終端通信(三)——客戶端與服務(wù)端通信過(guò)程以及實(shí)現(xiàn)數(shù)據(jù)通信
Android BLE與終端通信(四)——實(shí)現(xiàn)服務(wù)器與客戶端即時(shí)通訊功能
Android BLE與終端通信 ( 五 )——Google API BLE4.0低功耗藍(lán)牙文檔解讀之案例初探

Android 硬件加速
Android硬件加速
Android 4.0的圖形硬件加速及繪制技巧

掃描
Github項(xiàng)目解析(十)-->幾行代碼快速集成二維碼掃描庫(kù)
Android高級(jí)控件(三)—— 使用Google ZXing實(shí)現(xiàn)二維碼的掃描和生成相關(guān)功能體系

支付相關(guān)
超詳細(xì)Android接入支付寶支付實(shí)現(xiàn),有圖有真相
Android快速實(shí)現(xiàn)微信支付(真的!很快!)

Android數(shù)據(jù)傳輸
Android產(chǎn)品研發(fā)(九)-->App網(wǎng)絡(luò)傳輸協(xié)議
Android產(chǎn)品研發(fā)(十五)-->內(nèi)存對(duì)象序列化

Android App 輪詢
Android產(chǎn)品研發(fā)(十三)-->App輪詢操作

Android App 升級(jí)與更新
Android產(chǎn)品研發(fā)(十四)-->App升級(jí)與更新

Android 異常處理
Android源碼解析(二十三)-->Android異常處理流程

進(jìn)程間通信
Android應(yīng)用進(jìn)程間通信之Messenger信使使用及源碼淺析
Android aidl Binder框架淺析
初涉IPC,了解AIDL的工作原理及使用方法
Android:學(xué)習(xí)AIDL,這一篇文章就夠了(上)

其它
Android布局優(yōu)化之ViewStub、include、merge使用與源碼分析
你對(duì)LinearLayout到底有多少了解?(一)-屬性篇
你對(duì)LinearLayout到底有多少了解?(二)-源碼篇

參考

Android 名企面試題及涉及知識(shí)點(diǎn)整理~第二波
[干貨]2017已來(lái),最全面試總結(jié)——這些Android面試題你一定需要

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,179評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 175,628評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 62,642評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,444評(píng)論 6 405
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 54,948評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 42,185評(píng)論 0 287
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,717評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,602評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,794評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,045評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 34,418評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 35,671評(píng)論 1 281
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,414評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,750評(píng)論 2 370

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