熱門前沿知識相關面試問題-android插件化面試問題講解

插件化由來:react

  • 65536/64K【技術層面上】
    隨着代碼愈來愈大,業務邏輯越來繁雜,因此很容易達到一個65536的天花板,其65536指的是整個項目中的方法總數若是達到這個數量時則不沒法建立新的方法了,因此基於這個緣由插件化就產生了。
  • 功能層面的解耦、維護團隊的分離,這也是大勢所趨,每一個團隊會維護一個APK中的不一樣的業務模塊,若是每一個業務模塊升級都須要對整個APK進行升級,代價實在太大,雖然說目前有H5的方式能解決這個問題,可是體驗上確定是無法中Native的APP進行比較的。雖然說來自Facebook的react native現在比較流行,可是在國內插件化用得比較多,畢境是純native。

插件化要解決的問題:性能

  • 動態加載APK:
    指的是有一個宿主程序會從sdcard中動態加載APK,下面從代碼層面來進行說明:在Android中有兩個加載器:
    DexClassLoader:主要是從jar文件中加載字節碼文件,主要用於動態加載、代碼熱更新等等,能夠加載APK中的字節碼。
    PathClassLoader:它只能加載文件目錄下的APK。
    那具體如何動態加載呢?先用DexClassLoader經過反射去加載相印的Activity,以下:

     而後抽象一個BaseActivity,其大致的邏輯是若是有ProxyActivity則走它的邏輯,不然執行正常的邏輯,以下:
    spa

    接着在MainActivity中去設置contentView,值得注意的是由於讀取不到另一個APK中的xml文件,因此這裏得用動態代碼的生成View的方式來設置,以下:
    插件

  • 資源加載:
    實際上是用的Android系統提供的AssetManager去調用它裏面隱藏的一個方法來實現的,具體以下:
  • 代碼加載:
    其實也就是利用Java中的類加載器來進行加載,不過Android有它特殊的地方,由於有組件的概念,並且組件有它的生命週期方法,因此這裏經過反射來調用相應Activity的生命週期方法,首先獲取生命週期的方法:

    最後再在相應的生命週期中調用相應的方法:
    xml

其中發現插件化中大量用到了反射,說到反射確定會有性能問題~~這也是插件化技術的一個問題。blog

相關文章
相關標籤/搜索