2015-05-05 87 views
3

我推薦這本書:由安卓遊戲開發者Mario Zechner和Robert Green開發的Android 4遊戲開發。OOP設計vs智能手機的性能

192頁的書中指出:

Method calls have a larger associated cost in Dalvik than in other VMs. Use static methods if you can, as those perform best. Static methods are generally regarded as evil, much like static variables, as they promote bad design, so try to keep your design as clean as possible. Perhaps you should avoid getters and setters as well. Direct field access is about three times faster than method invocations without the JIT, and about seven times faster with the JIT. Nevertheless, think of your design before removing all your getters and setters.

現在,這是否有時下巨大的影響?性能和設計之間最好的是什麼?因爲如果我要擁有靜態變量和方法,它會在應用程序終止之前存在於RAM中,如果我的應用程序太大而且android 2.3將成爲市場的一部分,那將會很糟糕。

+1

爲了優化性能,有很多事情違背了良好的面向對象操作規範,但是我個人只會將它們作爲最後的手段。在達到這個階段之前,還有很多其他的東西可以優化。如果你必須這樣做,這是一個問題,你想交換代碼質量來提高性能。 – hidro

+0

吸氣劑和吸附劑也因某些方面受到批評。你可以用'final'字段替換它們,也可以用於O/R映射。其餘部分:最後優化1%,確實很慢。 –

回答

2

由於我們需要考慮低配置設備,所以性能是在android設備上開發時需要考慮的一個重要因素。

就靜態變量和方法的使用而言,它完全取決於應用程序定位到的特定設備。

你是絕對正確的 - 靜態變量和方法,將駐留在RAM中,直到應用程序終止,但是你看到那不是一個問題,如果您的Android設備與1+ GB的RAM供電,如果你信任我是針對2.3,應用程序將有很多ANR的,因爲variouse對象所需的內存將不可用。

最適合你出手更專注於:

  • 模塊化設計 ,最好用MVC或singelton工廠模式。
  • 使用正確的高級優化(通過代碼或使用第三方庫,例如:使用jackson進行解析而不是傳統方式或使用Volley進行網絡連接)。
  • 使用MAT,DDM等工具進行適當的分析。
  • 當UI被隱藏起來

郵政發展

  • 釋放內存:檢查您的應用程序是使用多少內存 每一個Android設備有不同數量的可用系統內存,從而提供一個不同的堆限制每個應用。

    您可以調用getMemoryClass()以兆字節爲單位估算應用程序的可用堆。

  • +0

    +1我應該多關注什麼。好主意以單身或工廠模式指向MVC。我從來沒有想過單身人士和工廠模式。這樣我可以最大限度地減少內存的使用。謝謝。 – mubuss

    4

    開發人員經常在做什麼時候會忘記微型優化應該做的最優化沒有打破設計。場是靜態的還是非靜態的是純粹的設計選擇。同樣,是否有吸氣劑和安裝劑是有意義的還取決於您是否想要使專用或公開的字段

    所以,一旦你完成設計階段,並前來執行階段,然後再看看使用StringBuilder的字符串上#CONCAT優化。當你進入實施階段,你就已經在現場是否有要私人是否它必須是靜態的決定現在

    ,到技術部分 - 實際上靜態方法調用始終確保編譯時綁定。所以打電話給他們便宜

    通常直接字段訪問比使用getter/setter更快(JIT可能內聯getter/setter,但它仍然比直接訪問要貴)。

    所以,這本書對於性能是正確的。但你不應該在設計上妥協,以提高性能

    +1

    現在這是一個很好的答案。非常感謝。 – mubuss