Androidapplicationui优化_第1页
Androidapplicationui优化_第2页
Androidapplicationui优化_第3页
Androidapplicationui优化_第4页
Androidapplicationui优化_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Android application ui优化Android程序结构一般来说Android程序主要由下列4部分组成:ActivityBroadcast ReceiverServiceContent ProviderActivity 介绍一个应用程序是由一个或者多个Activity组成,一个Activity代表了可以和用户进行交互的可视化界面。Activity通过布局管理添加各种View组件通过setContentView(int)方法可以将视图呈现出来:Activity生命周期:Broadcast Receiver介绍Broadcast Receiver负责对外部事件做出响应Broadcas

2、t Receiver不生成UI,是不可见的Broadcast Receiver需要在程序中进行注册应用程序可以通过Context.sendBroadcast()将自己的intent广播出去,其他程序通过自身的Broadcast Receivers截获后进行时间处理。Service介绍service运行在后台,负责处理一些用户看不到,并且会有持续时间的事情。比如下载数据,播放音乐等。service是跑在程序的主线程中,处理耗时的事件续service没有用户界面所有用户实现的service必须继承系统的Service类,并且在配置文件中进行注册。Content Provider 介绍数据在Andr

3、oid当中是程序私有的,Content Provider提供了多个程序间数据交互的机制。Content Provider暴露出来一些标准的API来对数据进行操作:query(Uri,String,String,String,String):通过关键字查询数据insert(Uri, ContentValues) :将一组数据插入到指定的地方update(Uri, ContentValues, String, String) :更新数据delete(Uri, String, String) :删除数据Android应用的工程文件组成:src源文件(java文件)R.java文件assets目录re

4、s目录(资源)drawable目录layout目录values目录AndroidManifest.xmlAndroidManifest文件组成:声明应用程序的构成程序包的全局变量活动(Activities)内容管理器(Content Providers)服务(Services)广播接收器(Broadcast Receivers)请求安全授权(uses-permission)声明安全授权(permission)Android Service应用简例Service的主要功能是提供后台服务调用,与activity不同,Service没有界面,不能与用户交互,Activity在用户离开应用界面时会停止

5、,而Service会一直在后台运行,除非明确令其停止。Service也有生命期的概念,与Activity类似。当启动Service时,先调用OnCreate()方法,然后用onStart()方法。停止Service时,则调用onDestroy()方法。比较好的一个例子就是音乐播放器。在一个音乐播放器的应用中,至少会有一个Activity, 然而,音乐播放放这个功能并没有对应的Activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,音乐播放器这个Activity会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播

6、放。同时,系统也将保持这个service一直执行,直到这service运行结束。Mediaplayer介绍MediaPlayer类可以用来播放音频、视频和流媒体,MediaPlayer包含了Audio和Video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的。此为该播放器的用户主界面按下开始后,我们退出程序,可以发现音乐仍在播放。通过如下步骤:MenuSettingsApplicationsRunning services。在弹出的Running services中可以看到我们创建的MusicService还在运行下图为MusicS

7、ervice生命周期以下为主要代码:main.java public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); findView(); start.setOnClickListener(startlis); stop.setOnClickListener(stoplis); private OnClickListener startlis=new OnClickListener() Overridepublic void

8、onClick(View v)startService(new Intent(main.this, MusicService.class); /启动服务;private OnClickListener stoplis=new OnClickListener() Overridepublic void onClick(View v)stopService(new Intent(main.this,MusicService.class);/停止服务MusicService.javapublic IBinder onBind(Intent intent) / TODO Auto-generated

9、method stubreturn null;Overridepublic void onCreate() super.onCreate();pl=MediaPlayer.create(this,R.raw.music); Override public void onStart(Intent intent, int startId) super.onStart(intent, startId); pl.start(); Overridepublic void onDestroy() pl.stop();super.onDestroy();在AndroidManifest中添加权限:从以上简单

10、例子可以对android系统中service服务有一个初步了解。Android UI优化Android在UI优化方面可以从以下五个方面入手:Adapter优化背景和图片优化绘图优化视图和布局优化内存分配优化下面主要从Adapter、布局、图片三个方面进行分析。Adapter优化什么是Adapter?Adapter在Android中占据一个重要的角色,它是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到Adapter。如图1直观的表达了Data、Adapter、View三者的关系。一、Android中Adapter我们可以看到在An

11、droid中与Adapter有关的所有接口、类的完整层级图。在我们使用过程中可以根据自己的需求实现接口或者继承类进行一定的扩展。比较常用的有BaseAdapter,ArrayAdapter,SimpleCursorAdapter等。BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;ArrayAdapter支持泛型操作,通常需要实现getView方法,特殊情况下(结合数据rowid),为了让ui事件相应处理方便点最好重写getItemId;SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应

12、起来。如需要实现更复杂的UI也可以重写其他方法。二、一个继承BaseAdapter的类的代码段Adapter与View的连接主要依靠getView这个方法返回我们需要的自定义view。ListView是Android app中一个最最最常用的控件了,所以如何让ListView流畅运行,获取良好的用户体验是非常重要的。对ListView优化就是对Adapter中的getView方法进行优化。布局优化FrameLayout是最简单的一个布局对象。它被定制为你屏幕上的一个空白备用区域,之后你可以在其中填充一个单一对象 比如,一张你要发布的图片。所有的子元素将会固定在屏幕的左上角;你不能为FrameL

13、ayout中的一个子元素指定一个位置。后一个子元素将会直接在前一个子元素之上进行覆盖填充,把它们部份或全部挡住(除非后一个子元素是透明的)。layout的层次: 减少视图层级结构从上图可以看到存在两个FrameLayout,红色框住的。如果能在layout文件中把FrameLayout声明去掉就可以进一步优化布局代码了。 但是由于布局代码需要外层容器容纳,如果直接删除FrameLayout则该文件就不是合法的布局文件,这种情况下就可以使用 标签了。也有一些使用限制: 只能用于xml layout文件的根元素;在代码中使用LayoutInflater.Inflater()一个以merge为根元素

14、的布局文件时候,需要使用View inflate (int resource, ViewGroup root, boolean attachToRoot)指定一个ViewGroup 作为其容器,并且要设置attachToRoot 为true。重用layout代码如果在某个布局里面需要用到另一个相同的布局设计,可以通过 标签来重用layout代码,另外,通过,除了可以覆写id属性值,还可以修改其他属性值,例如android:layout_width,android:height等。延迟加载ViewStub 是一个不可见的,大小为0的View,最佳用途就是实现View的延迟加载,在需要的时候再加载

15、View,可Java中常见的性能优化方法延迟加载一样。当调用ViewStub的setVisibility函数设置为可见或则调用inflate初始化该View的时候,ViewStub引用的资源开始初始化,然后引用的资源替代ViewStub自己的位置填充在ViewStub的位置。因此在没有调用setVisibility(int)或则inflate()函数之前ViewStub一种存在组件树层级结构中,但是由于ViewStub非常轻量级,这对性能影响非常小。可以通过ViewStub的inflatedId属性来重新定义引用的layout id。图片优化图片优化主要从以下几方面进行:使用9patch格式的图片资源;使用png图片压缩工具对9patch格式图片进行压缩;使用-land,-mdpi,-hdpi等作为l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论