原创 Kotlin協程(5)Flow

0,引子 看下面的例子: fun fooAsync(p: Params): CompletableFuture<Value> = CompletableFuture.supplyAsync { bar(p) } 可以使用Fu

原创 用於過濾aar中衝突類(class)和so庫的腳本,也可以用來過濾jar中衝突class

需求產生的原因,有時候我們接入三方包的時候,會出現類衝突,這個時候我們就想能不能把三方包中的衝突類過濾掉,不參與編譯。網上百度,google都沒有找到一個好的解決方案,然後自己動手豐衣足食。 靈感來源:Configuring Multi-

原创 Android的MVVM架構的單Activity應用實踐

前言 談Android架構大家很容易想到MVC、MVP和MVVM。 1、MVC 首先分析一下上面各層之前對應的Android代碼,layout.xml裏面的xml文件就對應於MVC的view層,裏面都是一些view的佈局代碼,而各種Ja

原创 Kotlin協程作用域(4)

CoroutineScope: public interface CoroutineScope { public val coroutineContext: CoroutineContext } 這裏先把這個方法的註釋文檔放過來

原创 Kotlin協程掛起(3)

協程的掛起是個很重要也比較難懂的概念。 從協程的啓動開始講起。 @Test fun 測試協程啓動() { GlobalScope.launch(start = CoroutineStart.DEFAUL

原创 RxJava學習篇之一:基礎Observable,Observer,Single,Subject,Scheduler

一、Observable,Observer 在ReactiveX中,一個觀察者(Observer)訂閱一個可觀察對象(Observable)。觀察者對Observable發射的數據或數據序列作出響應。這種模式可以極大地簡化併發操作,因爲它

原创 Binder驅動邏輯

Binder驅動: 所有的用戶控件方法都會經過系統調用對應到binder驅動方法,如: open-> __open() -> binder_open()  binder_init static int __init binder_i

原创 隨着然鍵盤顯示與消失的popuwindow

 最近項目中碰到了這麼個需求,就是一個popwindow要隨着軟件鍵盤彈出與消失,首先看一下完成後的效果。 問題思考: 一,首先我要知道能夠監聽到PopupWindow的彈出和消失。       PopupWindow的消失很簡單,Po

原创 記錄一下面試考題二(Ap性能優化,Activity、Window和View,TLS1.1,TLS1.2)

1,APP性能優化 APK瘦身 將圖片轉換爲 webp 格式 WebP是谷歌提供的一種支持有損壓縮和無損壓縮的圖片文件格式,而且可以提供比JPEG或PNG更好的壓縮。在Android 4.0(API level 14)中支持有損的WebP

原创 記錄一下面試考題一(組件化,ListView和RecyleView區別,App啓動,Binder)

1,組件化和ARouter原理 組件化定義:由若干獨立的子模塊,組合成一個整體,降低模塊間的耦合,這些子模塊在補足一定的條件下,都可獨立運行。主模塊也不會因爲缺少任意子模塊而無法運行。組件之間可以靈活的組建。 這裏面有一個主要的問題就是組

原创 AS多渠道打包

在講AS多渠道打包之前,先將一丟丟AS使用的小知識點,防止自己忘記: AS調試的快捷鍵:F7(進入方法),F8(按行執行),F9(調到一下個斷點) 進入調試模式相信大家都知道: 還有2個小的關於調試的按鈕: 還有一個Evaluate

原创 淺談 PopupWindow 在 Android 開發中的使用

在Android中彈出式菜單(以下稱彈窗)是使用十分廣泛一種菜單呈現的方式,彈窗爲用戶交互提供了便利。關於彈窗的實現大致有以下兩種方式AlertDialog和PopupWindow,當然網上也有使用Activity並配合Dialog主題

原创 Android視圖的頂部懸停的實現

何爲視圖的頂部懸停呢?上圖看吧: 我這裏給出2中實現方式: 一,用ScrollView+listView實現。 問題的思考: a,如何知道ScrollView滑動到了什麼位置(即我怎麼知道我的Y軸滑動到了哪裏?) 我在網上發現了這麼一個

原创 AndroidStudio使用過程中碰到的問題

1,debug 問題 單步調試:F8 進入方法中:F7 下一個端點或者跳出方法外:Shift+F8 下一個端點:Alt+F9 2,lint錯誤導致無法打Release包報錯 Gradle中加上 lintOptions {

原创 Kotlin協程啓動(2)

在說協程啓動之前來看看線程啓動的代碼: Thread { println("線程啓動") }.start() 是不是和協程的啓動很像: GlobalScope.launch {