1.减小主线程的阻塞时间
若一个操作耗时教长(超过5秒 用户无响应5秒 网络和数据库阻塞10秒 广播接收者执行超过10秒会导致ANR),我们应该将其放入后台线程中执行,只在需要修改UI界面时通知主线程进行修改。
Android已经提供了AsynTask以实现从主线程生成新的异步任务的方法。具体用法参见异步任务。
2.提高Adapter和AdapterView的效率
(1)重用已生成过的Item View
(2) 添加ViewHolder
(3) 缓存Item的数据
(4)分段显示
3.优化布局文件
如果我们的布局层次过多,那么在我们用findViewById的时间必然会变多,一个变多可能不要紧,但是有很多调用必然会影响性能。
(1) 使用观察布局的工具 Hierarchy Viewer
(2)使用布局优化工具: Layoutopt
(3)优化布局的层次结构
4.背景图
某些时候,我们可能希望能够尽可能多的提高Activity哪怕一点点的性能,这时候我们可以考虑优化Activity背景图。
首先我们必须知道,在android的Activity中,不止有你使用的setContentView时使用的View,还包含一些其它的View。其根View是一个DecorView,你设置的View就包含在其中,id为content。
(1)使用getWindow().setBackgroundDrawable()
(2)自定义主题
创建文件res/vlaues/theme.xml
<resources>
<style name="Theme.CustomBackground" parent="android:Theme">
<item name="android:windowBackground">@null</item>
</style>
</resources>
可根据需要将windowBackground设置为null或你需要的背景图
2.在<activity/>或者<application/>标签中添加 android:theme="@style/Theme.CustomBackground"
5.使用ViewStub
ViewStub是一个看不见,轻量级的View。它没有尺寸,也不会绘制以及以某种形式参与到布局中来。当只有调用Inflate之后其中的View才会被实例化,这意味着用ViewStub保留View层次结构代价是
(1) 延迟加载不常用的UI控件
当某些控件只在很少情况下才会使用,我们可以使用ViewStub来延迟加载,以提高UI加载速度及减小内存消耗。
-
<spanstyle="font-size:18px;">publicclassDelayLoadActivityextendsActivity{
-
-
@Override
-
protectedvoidonCreate(BundlesavedInstanceState){
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.delay_load);
-
-
Buttonbtn=(Button)findViewById(android.R.id.button1);
-
btn.setOnClickListener(newOnClickListener(){
-
@Override
-
publicvoidonClick(Viewv){
-
v.setEnabled(false);
-
ViewStubstub=(ViewStub)findViewById(R.id.stub);
-
Viewinflated=stub.inflate();
-
}});
-
}
-
-
}
-
</span>
(2)提高改变布局的速度
需要使用的场景
界面需要频繁切换
希望能提高切换速度
使用方法(以横竖换屏为例)
1.设置Activity的android:configChanges属性为keyboardHidden|orientation
2.为横竖屏分别编写不同的layout
3.创建一个layout,并包含两个ViewStub(分别对应横竖屏)
4.在横竖屏,通过调用ViewStub.inflate创建当前View并将另外一个设为GONE
5.绑定并设置控件的状态
fast_switch.xml
-
<spanstyle="font-size:18px;"><?xmlversion="1.0"encoding="utf-8"?>
-
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
-
android:layout_width="match_parent"
-
android:layout_height="match_parent"
-
android:orientation="vertical">
-
<ViewStubandroid:id="@+id/portrait_subView"
-
android:layout_width="fill_parent"
-
android:layout_height="fill_parent"
-
android:layout="@layout/portrait"
-
android:inflatedId="@+id/portrait_view"/>
-
<ViewStubandroid:id="@+id/landscape_subView"
-
android:layout_width="fill_parent"
-
android:layout_height="fill_parent"
-
android:layout="@layout/landscape"
-
android:inflatedId="@+id/landscape_view"/>
-
-
-
</LinearLayout></span>
-
<preclass="html"name="code"><spanstyle="font-size:18px;"></span></pre><br>
-
<pre></pre>
-
<preclass="html"name="code"><spanstyle="font-size:18px;">publicclassMainActivityextendsActivity{
-
-
privatestaticfinalStringTAG="MainActivity";
-
-
privateViewStubviewStubLandscape;
-
privateViewStubviewStubPortrait;
-
-
privateViewlandscapeView;
-
privateViewportraitView;
-
-
@Override
-
publicvoidonCreate(BundlesavedInstanceState){
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.fast_switch);
-
viewStubLandscape=(ViewStub)findViewById(R.id.landscape_subView);
-
viewStubPortrait=(ViewStub)findViewById(R.id.portrait_subView);
-
Displaydisplay=getWindowManager().getDefaultDisplay();
-
intorientation=display.getOrientation();
-
Log.d(TAG,"orientation="+orientation);
-
setOrientation(orientation);
-
}
-
-
publicvoidsetOrientation(intorientation){
-
switch(orientation){
-
caseConfiguration.ORIENTATION_LANDSCAPE:
-
if(landscapeView==null){
-
landscapeView=viewStubLandscape.inflate();
-
if(portraitView!=null){
-
portraitView.setVisibility(View.GONE);
-
}
-
}else{
-
if(portraitView!=null){
-
portraitView.setVisibility(View.GONE);
-
}
-
landscapeView.setVisibility(View.VISIBLE);
-
}
-
break;
-
default:
-
if(portraitView==null){
-
portraitView=viewStubPortrait.inflate();
-
if(landscapeView!=null){
-
landscapeView.setVisibility(View.GONE);
-
}
-
}else{
-
portraitView.setVisibility(View.VISIBLE);
-
if(landscapeView!=null){
-
landscapeView.setVisibility(View.GONE);
-
}
-
}
-
-
break;
-
}
-
-
}
-
-
@Override
-
publicvoidonConfigurationChanged(ConfigurationnewConfig){
-
super.onConfigurationChanged(newConfig);
-
Log.d(TAG,"onConfiguration,orientation="+newConfig.orientation);
-
setOrientation(newConfig.orientation);
-
}
-
}</span></pre>
-
<p><br>
-
</p>
-
<p><spanstyle="font-size:18px"></span></p>
-
<p><spanstyle="font-size:18px"></span></p>
-
<pre></pre>
分享到:
相关推荐
适配所有市面上各种大小不一的安卓手机屏幕,特点是可以直接在Android studio的XML编辑器中直接预览不同手机屏幕的适配效果,提高工作效率,且完全不会有性能问题,极易上手 使用 第一步,复制该项目res目录下包含...
Litho 使用声明性 API 来定义 UI 组件。 您只需根据一组不可变的输入来描述 UI 的布局,框架会负责其余的工作。... 除了 Litho 的文本优化之外,这还允许更小的视图层次结构并提高内存和滚动性能。
在Android开发过程中,选择合适的工具能够大大提高开发效率。因此,我们整理了常用的Android开发工具集,包括开发工具、测试工具、性能优化工具等。这些工具都是经过我们精心筛选和测试的,能够帮助开发者们更加高效...
在Android开发过程中,选择合适的工具能够大大提高开发效率。因此,我们整理了常用的Android开发工具集,包括开发工具、测试工具、性能优化工具等。这些工具都是经过我们精心筛选和测试的,能够帮助开发者们更加高效...
在Android开发过程中,选择合适的工具能够大大提高开发效率。因此,我们整理了常用的Android开发工具集,包括开发工具、测试工具、性能优化工具等。这些工具都是经过我们精心筛选和测试的,能够帮助开发者们更加高效...
在Android中如何使用语音服务和Google Map Apl? Android如何访问摄象头、传感器等硬件的APl? 如何时行Widget开发?如何用各种Android组件来打造漂亮的UI界面? Android如何解析XML数据?又如何提高解析速度和...
在Android开发过程中,选择合适的工具能够大大提高开发效率。因此,我们整理了常用的Android开发工具集,包括开发工具、测试工具、性能优化工具等。这些工具都是经过我们精心筛选和测试的,能够帮助开发者们更加高效...
为了提高ListView的效率和应用程序的性能,在Android应用程序中不应该一次性加载ListView所要显示的全部信息,而是采取分批加载策略,随着用户的滑动,动态的从后台加载所需的数据,并渲染到ListView组件中,这样...
Android应用程序与传统的PC应用程序一样,都是消息驱动的。也就是说,在Android应用程序主线程中,所有函数都是在一个...掌握Android应用程序消息处理机制,有助于我们熟练地使用同步和异步编程,提高程序的运行性能
本书涵盖了Android开发的多个方面,包括UI设计、数据存储、网络通信、多线程处理、性能优化等。每个问题都提供了详细的解答和示例代码,帮助读者深入理解问题本质,掌握解决方法。此外,本书还提供了一些实用的工具...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
顾名思义,这是一个用于Android的简单记分板UI。 您可以添加新玩家,增加/降低玩家分数以及删除玩家。 棒棒糖版本 KitKat版本 设计 SimpleDashboard使用独特的调色板来创建一种简单而现代的设计语言。 材料设计...
虚拟视图七巧板项目安卓的iOS 服务器在Android... 这使得Android系统中的最终视图变平并且渲染性能得到改善。 动态构建业务组件的XML模板和提高性能的虚拟视图,这是使用VirtualView的两个最重要的原因。 有关更多信息
书中的每个知识点都有配精心设计的示例,尤为值得一提的是,它还以迭代的方式重现了各种常用的android应用和经典android游戏的开发全过程,既可以以它们为范例进行实战演练,又可以将它们直接应用到实际开发中去。...
首先,需要熟悉Android的UI/UX设计原则,以创建出直观、易用的界面。通讯录的界面设计应该简洁明了,使用户能够快速找到所需的功能。 在数据存储方面,Android提供了SQLite数据库作为本地存储解决方案。开发者可以...
Debug-View是用Kotlin实现的用于Android调试的浮层调试控制台,这个控制台会一直浮在app的UI最上层, 用于实时地、直观地显示app的性能指标和日志信息:App使用的内存信息、App的实时帧率FPS、app启动时间、Activity...
TestInAppium - 基于Appium的Android自动化测试 代码仅针对我司产品,但集成现今主流的测试方法,为您提供一点小参考 如果本项目对您有一点点帮助,欢迎您能赏个Star:star:,支持我将项目持续维护和开源下去 已实现...
12.1 Android 5.X UI设计初步 258 12.1.1 材料的形态模拟 258 12.1.2 更加真实的动画 258 12.1.3 大色块的使用 259 12.2 Material Design主题 260 12.3 Palette 261 12.4 视图与阴影 263 12.5 Tinting和...
虽然从目前来说H5在Android系统中的速度可能还欠佳一些,但相信随着手机的性能不断的提高,这些问题都会被解决 使用H5开发Android的UI界面,最重要的就是如何实现Js代码和Java代码之间的互相调用了 在讲解之前,让...