2016-09-15 92 views
12

最近我讀到了有關Dalvik 65K方法的限制。我明白,方法調用列表只能調用第一個65536方法引用。 要解決這個問題,我們有許多解決方案。其中之一是通過使用Android的支持庫將多個.dex文件拆分爲多個類[classes.dex,classes1.dex ...]的多重分解。Multidexing android應用程序的缺點

我不明白的是,由於這種多重索引,Android應用程序有什麼缺點,爲什麼我們應該付出很多努力來儘量減少引用方法的數量。

基本上我的理解是,爲了減少方法數量,我必須減少模塊化,這使得我的代碼在讀取第三方庫代碼過程中燒燬的小時數減少。減少方法數值得嗎?

+0

增加構建時間,我建議避免多重分解。 –

+0

@MuhammadBabar如果您將應用程序劃分爲多個模塊,則可以縮短構建時間。 –

+0

@AkashKava是不是變得更加忙碌的管理或否則請給一些例子或良好的職位解釋爲什麼? –

回答

10

您正在過度關注multidex,而應該觀察並確定應用程序是否存在任何性能問題通過分析你的應用程序。

Multidexing幾乎不會增加任何代碼大小,主要尺寸和性能問題與動畫/圖像/音頻/視頻資源有關,它們會增加尺寸並降低性能。

包括許多第三方庫最終將通過64k的限制,今天幾乎所有的應用程序都是多指標的,今天用戶需要多功能的應用程序,這需要與許多第三方庫集成。

只有在進行動畫/遊戲編程時,速度最重要的是,更多的方法調用可能是有害的,但這與多分辨率無關,即使是寫得不好的小型非多分辨應用程序也會在任何設備上執行失敗。

啓動時間會影響多重分解,但它肯定可以通過改變你的應用程序邏輯來延遲加載其他昂貴的庫和資源。

正在減少方法數值得嗎

NO

理想情況下,你應該使用更多的方法和模塊化代碼,因爲測試和不斷變化的移動應用程序是在發佈後巨大的挑戰。調試和刪除錯誤的成本更高,然後multidex大小及其對性能的影響。由於屏幕小,品牌不同,用戶界面不同,與電腦相比,用戶對手機上的應用程序更加生氣。如果將代碼分成多個單獨測試的庫,則保持用戶需求將變得更加容易。

+0

你確定它不會開銷應用程序加載時間嗎?實際上如何用多指標/非多指標來衡量app的加載時間? – Mani

+1

我已經提到啓動時間會影響,這意味着它將加載模塊緩慢,但它可能並不重要。 –

+0

我同意@AkashKava。我們始終可以用衆多技術來解決啓動時間問題,而android用戶則習慣於使用閃屏技術。你的回答幫助我現在有一個清醒的頭腦。 –

4

主要缺點是更大的dex/apk大小。 Dex文件具有在該dex文件中的所有類之間共享的常量池。當類跨多個dex文件進行分割時,這些共享常量必須在其使用的每個dex文件中重複。

+1

所以你的意思是說沒有運行時的缺點給android應用程序。具有多個dex類的android應用程序的行爲與僅具有一個的行爲完全相同。除了妥協與APK的大小之外,當涉及到設備中的應用程序時,沒有其他任何事情會受到影響。撇開開發階段的弊端。 –

+0

好吧,dex文件不得不加載到內存中,所以如果dex文件更大...... :) – JesusFreke

+0

oohh !!所以如果需要將dex文件加載到內存中,並且dex文件較大,則需要更多時間才能加載到內存中,從而使應用程序的冷啓動時間更長。所以應用程序需要更多時間才能開始。這是你的意思嗎? –

1

Multidexing本身是一個不良詞彙,如果應用程序是multidex,意味着有執行應用程序的android內部進程的負擔。

每個Android應用程序都在一個進程(任務)內部運行,當其多指標時,這意味着無論您如何編寫代碼,該進程都會被分成多個部分,這些部分會導致小型Android處理器出現性能問題。

我同意aakash kava幾乎所有的應用程序都是多指標的,因爲現在一天的android處理器在性能上非常好,而android RAM非常好,但它並不意味着我們應該忽略多重分解。

相關問題