文档章节

android应用开发 网络编程与常见功能优化总结

补全
 补全
发布于 2013/04/07 16:53
字数 1058
阅读 584
收藏 17
一般的应用都是从服务器获取数据,然后通过极致的界面风格,将数据清晰,明朗的展现给用户。、
那么就可以分为这两块:
1.界面UI   追求极致
2.功能
  2.1获取数据:主要是与服务器通信,那么就要涉及到网络编程 :
     2.1.1  URlConnection 
  2.1.2  HttpURLConnection(post get)
  2.1.3  Socket
  2.1.4  HttpClient(post get)
  2.1.5  WebService(自己拼装请求xml 数据,采用开源jar包 ksoap-android-)
  
  2.2网络通信的时候,采用的异步数据获取
     2.2.1   AsynTask android 封装好的异步数据获取,包括三个方法
         doInBackground 执行在子线程中的异步方法
         onProgressUpdate 数据获取之后 执行的方法,在主线程中可以在这里更新UI界面
         onPostExecute   异步方法执行前,可以进行界面友好提示 在主线程中执行的方法
     2.2.2  自己封装一个任务类(子线程)thread   采用线程池 这里需要自己维护一个任务列表,并且做到任务的优先级
 
  2.3 android优化 最常见的就是listview 的大数据优化  图片优化  访问网络的优化
     2.3.1 优化的原则: 数据延迟加载  分批加载  本地缓存
  2.3.2 listview 数据优化 复用contentview  
                          创建static class ViewHolder
                          分批加载 滑动监听 或者按钮  显示更多数据  往下拖动 显示
       
     2.3.3 listview 图片优化  异步加载  
                              本地缓存(二级缓存  内存(软引用实现),sd卡)  
         快速滑动时不显示图片
         分为核心线程池和普通线程池,下载图片等耗时任务放置在普通线程池
  2.3.4 超级大胖子Bitmap
        及时的销毁(Activity的onDestroy时将bitmap回收,
        在被UI组件使用后马上进行回收会抛RuntimeException:
        Canvas:tryingtousearecycledbitmapandroid.graphics.Bitmap)
        设置一定的采样率(有开发者提供的图片无需进行采样,
        对于有用户上传或第三方的大小不可控图片,可进行采样减少图片所占的内存),
        从服务端返回图片,建议同时反馈图片的size巧妙的运用软引用drawable对应resid的资源,
        bitmap对应其他资源任何类型的图片,如果获取不到(例如文件不存在,或者读取文件时跑OutOfMemory异常),
        应该有对应的默认图片(默认图片放在在apk中,通过resid获取);
     2.3.5 Drawable
         ui组件需要用到的图片是apk包自带的,、
         那么一律用setImageResource或者setBackgroundResource,而不要根据resourceid
         注意:get(getResources(),R.drawable.btn_achievement_normal)该方法通过resid转换为drawable,
         需要考虑回收的问题,如果drawable是对象私有对象,在对象销毁前是肯定不会释放内存的。
         
 2.3.6 访问网络优化
                              设置超时时间,采用压缩流 传送数据 
2.3.7  内存优化,static是Java中的一个关键字,当用它来修饰成员变量时,那么该变量就属于该类,而不是该类的实例。所以用static修饰的变量,它的生命周期是很长的。
                    优化方法:在一个工程中集中管理这些静态常量 
               尽量避免static成员变量的使用,
         使用SoftReference或者WeakReference代替强引用
     尽量避免在一个activity里面写线程内部类:
     线程是Activity的内部类,所以Thread中保存了Activity的一个引用,当run函数没有结束时,Thread是不会被销毁的,
     因此它所引用的老的Activity也不会被销毁,当这些activity加载了很多资源,没有释放也就很容易出现了内存泄露
     的问题。
     Android提供的AsyncTask,但事实上AsyncTask的问题更加严重,Thread只有在run函数不结束时才出现这种内存泄露问题,然而AsyncTask内部的实现机制是运用了
     ThreadPoolExcutor,该类产生的Thread对象的生命周期是不确定的,是应用程序无法控制的,
     因此如果AsyncTask作为Activity的内部类,就更容易出现内存泄露的问题。
     那么就自己写一个线程类,管理这些任务。

本文转载自:http://www.eoeandroid.com/blog-639544-3896.html

共有 人打赏支持
补全
粉丝 20
博文 27
码字总数 4103
作品 0
福州
高级程序员
加载中

评论(1)

羊小羊
学习了
Android RxJava: 这是一份全面的 操作符 使用汇总 (含详细实例讲解)

前言 ,由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 开发者的欢迎。 如果还不了解RxJava,请看文章:Android:这是一篇 清晰 & 易懂的Rxjava 入门教程 如此受欢迎的原...

Carson_Ho
05/31
0
0
Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)

前言 在 开发中,性能优化策略十分重要 因为其决定了应用程序的开发质量:可用性、流畅性、稳定性等,是提高用户留存率的关键 本文全面讲解性能优化中的所有知识,献上一份 性能优化的详细攻...

Carson_Ho
05/30
0
0
Android的三种网络通讯方式详解

1.标准Java接口 java.net.*提供与联网有关的类,包括流、数据包套接字(socket)、Internet协议、常见Http处理等。比如:创建URL,以及URLConnection/HttpURLConnection对象、设置链接参数、链...

茗香墨语
2015/11/10
0
20
Android系统源码分析团体项目BeesAndroid正式上线啦

嗨,BeesAndroid开源技术小组正式成立啦,Bees,即蜜蜂,取义分享、合作与奉献的意思,这也是BeesAndroid小组的宗旨,我们第一个团体项目BeesAndroid也于2018年3月6日同步上线,该项目的前 ...

郭孝星
03/08
0
0
android中网络操作使用总结(http)

Android是作为智能手机的操作系统,我们开发的应用,大多数也都需要连接网络,通过网络发送数据、获取数据,因此作为一个应用开发者必须熟悉怎么进行网络访问与连接。通常android中进行网络连...

码农明明
2014/05/22
0
6

没有更多内容

加载失败,请刷新页面

加载更多

arts-week10

Algorithm 905. Sort Array By Parity - LeetCode Review Who’s Afraid of the Big Bad Preloader? 一文读懂前端缓存 一个网络请求3个步骤:请求,处理,响应,而前端缓存主要在请求处响应这两步...

yysue
48分钟前
0
0
00.编译OpenJDK-8u40的整个过程

前言 历经2天的折腾总算把OpenJDK给编译成功了,要说为啥搞这个,还得从面试说起,最近出去面试经常被问到JVM的相关东西,总感觉自己以前学的太浅薄,所以回来就打算深入学习,目标把《深入理...

凌晨一点
今天
4
0
python: 一些关于元组的碎碎念

初始化元组的时候,尤其是元组里面只有一个元素的时候,会出现一些很蛋疼的情况: def checkContentAndType(obj): print(obj) print(type(obj))if __name__=="__main__": tu...

Oh_really
昨天
6
2
jvm crash分析工具

介绍一款非常好用的jvm crash分析工具,当jvm挂掉时,会产生hs_err_pid.log。里面记录了jvm当时的运行状态以及错误信息,但是内容量比较庞大,不好分析。所以我们要借助工具来帮我们。 Cras...

xpbob
昨天
126
0
Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用...

飞扬青云
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部