原创 Android 消息機制

一 概述     Android消息機制主要指Handler的運行機制,主要包括上層的Handler接口以及下層的MessageQueue和Looper。 Handler :  消息處理。通常我們需要繼承並實現handleMessage方

原创 ThreadLocal源碼分析

ThreadLocal是一個線程內部的數據存儲類,可以在指定線程存儲和讀取數據,而數據對於其他線程是不可見的。日常開發中通常會比較少用到ThreadLocal,但是在一些特殊場景可以輕鬆實現一些比較複雜的需求。我們經常接觸到的Androi

原创 Android 輸入法框架 (2)- 輸入法顯示和隱藏

通常顯示或者隱藏輸入法有以下三個場景 當一個窗口焦點改變的時候,會根據Window屬性控制輸入法的顯示 App主動調用imm::showSoftInput或者imm::hideSoftinputFromWindow 輸入法自己調用ims:

原创 Android 插件化分析(4) - 啓動一個沒有在manifest註冊的Activity

Activity必須要在manifest裏申明,否則會拋出ActivityNotFoundException。這個是大家再熟悉不多的Android開發規則。 但是所謂的插件化就是要在不安裝新的apk的情況去修復bug或者增加新的功能,增加

原创 Android 插件化分析(5)- 加載外部dex

Android 插件化能從外部下載apk並加載主要依賴於ClassLoader。 ClassLoder是一個抽象類,其中最重要的是BaseDexClassLoader及其子類PathClassLoader和DexClassLoader.

原创 Android 插件化分析(3)- Activity啓動流程

在真正分析插件化技術前,我們必須瞭解一些必要的關於Android四大組件的相關知識。 以Activity爲例,我們需要了解Activity啓動過程,纔能有效的進行Hook實現插件化。 以Android 8.1爲例 我們啓動一個Activi

原创 Android 插件化分析(1)- 反射

Java中有一個非常強大的技術:反射。通常我們可以使用反射技術去調用一個類的私有方法或者是訪問和修改一個私有屬性。   1. 如何獲取一個類的類型 1.1 直接通過一個類的對象獲取它的類型。 String reflect

原创 Android 插件化分析(2)- 動態代理

代理模式是一個非常常用的設計模式,如果一個類的名稱帶有Proxy,基本就是使用了代理模式。 代理模式爲其代理的對象提供了訪問的控制。 UML圖如下 public interface IObject { void run();

原创 LeakCanary 原理和用法簡單總結

LeakCanary是Square公司基於MAT開發的一款監控Android內存泄漏的開源框架。 Java基礎知識 在總結之前需要先了解一些Java的基礎知識。 1. 強引用 通常可以認爲是通過new出來的對象,即使內存不足,GC進行垃圾

原创 解決繼承SwitchPreference後丟失動畫的問題

大概二年前,曾經遇到一個問題,使用SwitchPreference的子類時,Switch的點擊動畫居然沒了,原本點擊後SwitchPreference有一個過渡的動畫,使用子類就變成了很生硬的直接選中的狀態,但是奇怪的是子類沒有任何修改!

原创 Android 輸入法框架 (1)

以下來自android官網的介紹:Architecture OverviewThere are three primary parties involved in the input method framework (IMF) arch

原创 RecycleView實現左右滑動監聽和上下拖拽調換順序

       之前想實現ListView右滑刪除和上下拖拽交換位置的功能,但是找來找去,要麼就實現上比較複雜,要麼就是代碼太老了。從github找了幾個開源項目,但是總是有這樣那樣的bug。但是後來得知看到Google居然已經內置了這兩個