基於如何在合理利用資源的前提下,更進一步的提升視覺表現力。這裡所提到的視覺表現力並不是指直觀所看到的視覺效果,而是性能的提升。
這裡將包含兩個主要內容:
Drawing(繪製的刷新率)
Startup Time (啟動Activities的時間)
以上兩個性能的優化都將依賴於 Window backGround drawable功能設置。
通過Window backGround標識會對部分人產生一定的誤解,其實每次通過setContentView()來顯示預先配置的界面時,Android僅僅是將你所創建的Views添加到Activiy的Window中。而且這個Window並不僅僅包含你所創建的Views,還包括Android為 Activity預置的元素。通過Emulator運行你的程序,然後通過Hierarchy Viewer查看當前程序UI架構Root節點 DecorView,這個是Android額外添加的最頂層的節點。
實際上Window background drawable是由DecorView決定的。可以在Activity中調用getWindow().setBackgroundDrawable()方法來設置DecorView的background drawable。這裡要特別注意這個方法是針對當前版本的Android平台,以後可能會因為版本的更新或不同的硬件設備而改變。(目前我們僅針對G1,如果在其它環境下測試需要小心驗證)
如果目前正在使用android默認的標準Themes,那麼在調用getWindow().setBackgroundDrawable()方法之後,這個background drawable將會影響你的activities。通過一個例子來直觀的比較性能提升的效果:
可以看到保持activity的redraw模式下,當前的FPS為39幀 /每秒,大概相當於25毫秒/每幀。由於這個例子中將ImageView設為全屏顯示,並且完全覆蓋了activity的背景,所以background drawable佔用了不必要的計算資源。下邊創建一個新的Theme並且應用在Activity中,創建res/values/theme.xml, XML的內容:
- <resources> <style name="Theme.NoBackground" parent="android:Theme"> <item name="android:windowBackground">@null</item> </style></resources>
複製代碼
同時也需要修改AndroidMainfest.xml文件,將上邊所創建的Theme應用到Activity中,格式為:
-
<application android:icon="@drawable/icon" android:label="@string/app_name">
-
<activity android:name=".EggImageViewer" android:label="@string/app_name" android:theme="@style/Theme.NoBackground">
-
<intent-filter>
-
<action android:name="android.intent.action.MAIN" />
-
<category android:name="android.intent.category.LAUNCHER" />
-
</intent-filter>
-
</activity>
-
</application>
複製代碼
(也可以將Theme應用於<Application />標籤中)完成上邊的修改後,再來看看當前的FPS發生了什麼變化:
FPS可以增大到60+,性能得到如此大的提升,是不是比較難以置信呢?由此可以明白當應用MapView或者WebView全屏顯示的應用程序時,可以借用這個簡單設置的方法,來提升整體的性能。
通過上邊的例子可以直觀的瞭解window background drawable的優化方法,並且根據比較可以很明顯的看到設置前後的性能對比,希望這個簡單的技巧可以給你的應用帶來幫助。
另外基於這個技巧的應用,還可以延展出另外一個優化功能。對於某些需要全屏顯示的應用程序,可以通過Theme定義Window』s background的圖片,從而提高Activity的啟動速度。畢竟無需建立一個ImageView作為自定義的背景,而重複疊加在Activity window background。
實現方法:
創建 res/drawable/background_res.xml
- <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/shelf_panel" android:tileMode="repeat" />
複製代碼
創建res/values/theme.xml
- <resources> <style name="Theme.Shelves" parent="android:Theme"> <item name="android:windowBackground">@drawable/background_res</item> <item name="android:windowNoTitle">true</item> </style></resources>
複製代碼
往往一些看似簡單的方法,卻能起到非常大的作用。還希望大家在實踐中能不斷的挖掘出非常實用的技巧,然後與你周圍的人共享你的發現,同時在大家共同的見證下可以完善你的想法!
分享到:
相关推荐
android 性能优化-Systrace分析UI性能android 性能优化-Systrace分析UI性能
Android UI 优化.ppt
Android UI优化之merge标签的使用,主要介绍merge方法使用的注意事项及方法实现。
Android 性能优化之UI优化源码 配合博客参照 https://www.cnblogs.com/Oztaking/p/9350295.html
《Android应用程序开发教程(第2版)》教学课件02Android UI设计.pdf《Android应用程序开发教程(第2版)》教学课件02Android UI设计.pdf《Android应用程序开发教程(第2版)》教学课件02Android UI设计.pdf《Android应用...
支持全志平台的ui旋转,里面有全志平台的系统签名,通过反射 IWindowManager wm = WindowManagerGlobal.getWindowManagerService(); wm.freezeRotation(value); 实现ui旋转,其他平台需要系统签名后使用!切记必须要...
本书不仅会告诉读者创建灵活布局的最佳方法,还会帮助开发者优化已有的UI界面,从而使他们的应用运行更加流畅,拥有最佳性能。学习完本书,读者可以自己创建一个成功的Android应用的UI界面。 《AndroidUI基础教程》...
Android UI 界面设计 移动APP
《Android UI设计》面向创建移动应用的产品经理、设计师和开发者,系统讲解了从事Android UI设计必须要掌握的Android平台的主要技术和特性,全面总结了Android UI的设计原理、设计理念和设计模式,并通过一个综合的...
Android UI设计技巧 Android UI设计技巧Android UI设计技巧
Android UI控件组件库集合【源码】 热门标签,流式布局,刮刮乐控件,侧滑控件,循环幻灯片控件,自动换行控件,下拉列表,圆角进度控件等常用UI控件组件合集
Android UI开发专题 Android UI开发专题(一) 之界面设计 近期很多网友对Android用户界面的设计表示很感兴趣,对于Android UI开发自绘控件和游戏制作而言掌握好绘图基础是必不可少的。本次专题分10节来讲述,有关...
ANDROID UI设计工具,方便ANDROID UI设计
android UI界面开发图片,数量巨大,而且经典,觉得值得收藏 android UI界面开发图片,数量巨大,而且经典,觉得值得收藏
Android核心性能优化汇总: 一、UI优化 二、启动优化 三、崩溃优化 四、卡顿优化 五、安全性优化 六、弱网优化 七、APP深度优化 八、开发焦点问题优化 九、编程效率优化
Android UI设计心得。包括线性布局(LinearLayout)、相对布局(RelativeLayout)、表格布局(TableLayout)、框架布局(FrameLayout)、绝对布局(AbsoluteLayout)。其中AbsoluteLayout在Android SDK2.3.3之后已经...
android UI开发推荐颜色 android UI开发推荐颜色 android UI开发推荐颜色
本书详细阐述了与 Android UI开发相关的基本解决方案,主要包括 Android UI设计工具, Android UI布局, Android UI Widgets,Android UI选项菜单, Android UI本地菜单, Android UI操作栏, Android UI设计考虑, ...
android UI 特效集合