內存溢出是指程序在申請內存的時候,沒有足夠的內存能夠分配,致使Out Of Memory錯誤,也就是OOM。java
內存泄漏:對象都有生命週期的,在生命週期完成以後,就該被垃圾回收和釋放,若是得不到及時的釋放,就會一直佔用內存,形成內存泄漏。隨着內存泄漏的堆積,可用的內存空間愈來愈少,最後會致使內存溢出。android
致使內存泄漏有不少緣由,最多見的有內部類的使用,由於內部類持有外部引用。還有就是對Activity Context的使用,若是沒有特別的要求,儘可能使用Application context. 避免其餘地方持有Activity而得不到釋放,若是必需要用Activity Context,能夠用弱引用。緩存
顯式Intent: 即直接指定須要打開的Activity類,能夠惟一肯定一個Activity,意圖特別明確,因此是顯式的。設置這個類的方式能夠是Class對象(如SecondActivity.class),也能夠是包名加類名的字符串。應用程序內部Activity跳轉經常使用這個方式。服務器
隱式Intent: 隱式不明確指定啓動哪一個Activity,而是設置Action、Data、Category,讓系統來篩選出合適的Activity。篩選是根據全部的來篩選。網絡
Activity啓動有4種模式,區別以下:架構
standard:Activity的每一次啓動都會新建一個Activity實例,並將其壓入任務棧的棧頂,而無論這個Activity是否存在,而且會走生命週期框架
singleTop:棧頂複用模式,這種模式下,若是Activity已經位於任務棧的棧頂,那麼此Activity不會被從新建立,因此他的啓動三回調就不會執行,同時Activity的onNewIntent 方法會被回調,若是Activity已經存在可是不在棧頂,那麼它的做用和standard同樣。異步
singleTask:系統建立新任務並實例化位於新任務底部的 Activity。可是,若是該 Activity 的一個實例已存在於一個單獨的任務中,則系統會經過調用現有實例的 onNewIntent() 方法向其傳送 Intent,而不是建立新實例。一次只能存在 Activity 的一個實例。ide
singleInstance:單首創建一個新的任務棧。性能
分別調用onSaveInstanceState和onRestoreInstanceState 2個方法保存和恢復狀態。
不多使用AsyncTask了,異步基本用RxJava 來作。
Serializable(Java自帶): Serializable是序列化的意思,表示將一個對象轉換成可存儲或可傳輸的狀態。序列化後的對象能夠在網絡上進行傳輸,也能夠存儲到本地。
Parcelable(android 專用): 除了Serializable以外,使用Parcelable也能夠實現相同的效果,不過不一樣於將對象進行序列化,Parcelable方式的實現原理是將一個完整的對象進行分解,而分解後的每一部分都是Intent所支持的數據類型,這樣也就實現傳遞對象的功能了。
區別:Parcelable比Serializable性能高,因此應用內傳遞數據推薦使用Parcelable,可是Parcelable不能使用在要將數據存儲在磁盤上的狀況,由於Parcelable不能很好的保證數據的持續性在外界有變化的狀況下。儘管Serializable效率低點,但此時仍是建議使用Serializable 。 詳細介紹請看文章:序列化Serializable和Parcelable的理解和區別
Universal-Image-Loader,Picasso,Glide。這個能夠自由發揮,根據本身的實際狀況講解,若是本身有看過源碼之類的,儘可能多講。
concatMap和flatMap的功能是同樣的, 將一個發射數據的Observable變換爲多個Observables,而後將它們發射的數據放進一個單獨的Observable。只不過最後合併Observables flatMap採用的merge,而concatMap採用的是鏈接(concat)。總之一句一話,他們的區別在於:concatMap是有序的,flatMap是無序的,concatMap最終輸出的順序與原序列保持一致,而flatMap則不必定,有可能出現交錯。
MVP優勢:
MVP的缺點及優化:
addInterceptor(應用攔截器):
addNetworkInterceptor(網絡攔截器):
java層crash log收集:
經過實現系統的UncaughtExceptionHandler類,並重寫uncaughtException方法,在uncaughtException方法中會獲取到錯誤的日誌,能夠將日誌保存到本地,在適當的時機上傳至服務器,這樣開發人員就能夠獲取日誌,分析崩潰緣由。而且還能夠自定義提示信息,給出用戶友好的提示。