原创 Kotlin ? !! ?:含義

Kotlin中: 1. ?代表該值可爲空 camera?.stopPreview() 如果camera爲空,則不執行後面的程序;若不爲空,則執行後面的程序; 2. !!表示該值一定不爲空 3. ?: 與java三目運算符?:類似,但寫法

原创 startActivities(intents)注意點

若有兩個Intent採用startActivities方式啓動, Intent[0] = new Intent(this,TestActivity1.class); Intent[1] = new Intent(this,TestActi

原创 APKTool 使用

1.java -jar apktool.jar d -f test.apk -o test   test.apk要解析的apk, -o test 設置輸出目錄, apktool.jar 是工具名稱 解析出res目錄和Manifest 2.

原创 Android studio 編譯NDK--使用cmake

以編譯LibJpeg爲例,方便理解。 1.把下載下來的libjpeg庫中的所有文件都放在src/main/cpp 文件夾下: 2.libjpeg庫中已經寫好了CMakeLists.text,只需要引用一下就可以了,如果沒有則需要自己編寫

原创 ListView和RecyclerView中item長按後拖拽

由於ListView在Dialog裏面,所有用WindowManager的方式不合適,又從網上參考了一些資料後實現: 主要參考大神:https://github.com/1993hzw/Androids/blob/master/READM

原创 特殊問題:RelativeLayout中的最後一個控件的layout_marginBottom無效的問題

出現此問題的前提是:在ViewPager+fragment實現的頁面切換,在其中一個fragment的佈局中,根佈局是RelativeLayout; 解決方式:按照網上所說的方法在最後添加一個寬高爲0的View;但此時不行,我上一個佈局如

原创 RxJava 源碼分析

個人理解,僅供參考! 例子: Observable observable = Observable.create(new ObservableOnSubscribe<String>() { @O

原创 項目中遇到的關於RecyclerView界面刷新問題

實現RecyclerView帶過濾功能遇到的問題 復現路徑:首先沒有過濾出任何元素,界面顯示空白,此時很正常,然後清楚過濾關鍵字,此時應該顯示全部數據,但是卻顯示空白,onBindViewHolder()已經調用。 最後發現是由於調用了s

原创 layout_weight屬性

layout_weight屬性是LinearLayout中的屬性 如果是水平方向,則要看layout_width屬性;如果是垂直方向,則要看layout_height屬性; 以水平方向舉例: layout_width="match_par

原创 Thread.start 和run的區別

thread.start()是啓動線程,使線程進入就緒狀態,啓動一個新線程,在新線程中執行run方法;調用start()方法後,,可以繼續執行下面的代碼; run是thread中的一個方法,調用thread.run()後,需要等待run方

原创 Thread和Runnable區別

Thread是類,Runnable是一個接口,runnable可以突破單繼承的限制 runnable更容易實現資源共享,能被多個相同代碼的線程去處理同一個資源; 比如:自定義的runnable->runnable1 new Thread(

原创 requestLayout 和 invalidate區別

View繪製分三個步驟,順序是:onMeasure,onLayout,onDraw。調用invalidate方法只會執行onDraw方法;調用requestLayout方法只會執行onMeasure方法和onLayout方法,並不會執行o

原创 TCP

TCP採用三次握手確認建立一個連接; 位碼即tcp標誌位,有6種標示:SYN(synchronous建立聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置)

原创 IntentService

IntentService,可以看做是Service和HandlerThread的結合體,在完成了使命之後會自動停止,適合需要在工作線程處理UI無關任務的場景。 IntentService內部使用的是HandlerThread 和Hand

原创 OKHttp3源碼解析

總體流程: okHttpClient = new OkHttpClient.Builder() .addInterceptor(new TokenInterceptor()) .connectTimeou