Android开发中网络编程与常见功能优化总结

Android提供的AsyncTask,但事实上AsyncTask的问题更加严重,Thread只有在run函数不结束时才出现这种内存泄露问题,然而AsyncTask内部的实现机制是运用了 ThreadPoolExcutor,该类产生的Thread对象的生命周期是不确定的,是应用程序无法控制的,因此如果AsyncTask作为Activity的内部类,就更容易出现内存泄露的问题。

一般的应用都是从服务器获取数据,然后通过极致的界面风格,将数据清晰,明朗的展现给用户。

那么就可以分为这两块:

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的内部类,就更容易出现内存泄露的问题。

那么就自己写一个线程类,管理这些任务。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-09 04:02:07

Android开发中网络编程与常见功能优化总结的相关文章

Android开发中常用的ListView列表的优化方式ViewHolder

在Android开发中难免会遇到大量的数据加载到ListView中进行显示, 然后其中最重要的数据传递桥梁Adapter适配器是常用的,随着市场的需 求变化ListView'条目中的内容是越来越多这就需要程序员来自定义适配器, 而关键的就是适配器的优化问题,适配器没有优化好往往就会造成OOM (内存溢出)或者是滑动卡顿之类的问题,接下来我就给大家介绍一种常 用的Adapter优化方法 1 /** 2 * list View的适配器 3 */ 4 class Adapter extends Bas

IOS开发之网络编程(请求数据和断点续传)

IOS开发中网络编程应用场景:JSON数据获取,网络数据的下载. 一:请求JSON数据一般用异步请求的方式,如果用同步请求,则会造成IOS界面的执行过程阻塞,即界面部分在请求数据的过程中必须等待数据加载完毕. JSON数据的获取步骤: 1.设置网络地址的字符串:NSString *URLString = @"http://www.baidu.com"; 2.创建URL:NSURL *URL = [NSURL URLWithString:URLString]; 3.创建请求:NSURLR

Android开发中常见的设计模式

对于开发人员来说,设计模式有时候就是一道坎,但是设计模式又非常有用,过了这道坎,它可以让你水平提高一个档次.而在android开发中,必要的了解一些设计模式又是非常有必要的.对于想系统的学习设计模式的同学,这里推荐2本书.一本是Head First系列的Head Hirst Design Pattern,英文好的可以看英文,可以多读几遍.另外一本是大话设计模式. 单例模式 首先了解一些单例模式的概念. 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 这样做有以下几个优点 对于

Android开发中无处不在的设计模式——原型模式

不知不觉这个系列已经写了三篇了,其实很早之前就想写设计模式了,只不过怕自己误人子弟没有提笔去写.后来在实际开发中,发现设计模式可以让一个开发人员融会贯通所学的知识,为了进一步巩固自己,就写下了这一些列文章.前面介绍了三个模式. Android开发中无处不在的设计模式--单例模式 Android开发中无处不在的设计模式--Builder模式 Android开发中无处不在的设计模式--观察者模式 本篇文章介绍的模式其实很简单,即原型模式,按照惯例,先看定义. 用原型实例指定创建对象的种类,并通过拷贝

android开发中的5种存储数据方式

数据存储在开发中是使用最频繁的,根据不同的情况选择不同的存储数据方式对于提高开发效率很有帮助.下面笔者在主要介绍Android平台中实现数据存储的5种方式. 1.使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstance State保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整

在android开发中如何使用JavaMail程序

javaMail,是提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.我们可以基于JavaMail开发出类似于Microsoft outlook的应用程序.JavaMail是可选包,因此如果需要使用的话你需要首先从java官网上下载. 本文主要介绍JavaMail,javamail发送邮件确实是一个比较麻烦的问题不用第三方邮件程序.为了以后使用方便,自己写了段代码       Javamail-Android配置步骤: 下载A

Builder模式详解及其在Android开发中的应用

一.引言 在Android开发中,采用Builder模式的代码随处可见,比如说Android系统对话框AlertDialog的使用或者是Android中的通知栏(Notification)的使用,又比如说在一些常用的第三方库中也随处可见其踪迹,比如说一些常用的网络请求库如OkHttp或者是retrofit,又或者是图片加载库Glide中也不缺乏它的应用. 为什么Builder模式在Android或是Java开发中这么火呢?因为它相较于构造函数或者是Get/Set方法,它的灵活性和封装性上都比较有

android权限--android开发中的权限及含义(上)

android权限--android开发中的权限及含义(上) android.permission.EXPAND_STATUS_BAR 允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序 android.permission.FACTORY_TEST 作为一个工厂测试程序,运行在root用户 android.permission.FLASHLIGHT 访问闪光灯,android开发网提示HTC Dream不包含闪光灯 android.pe

Android学习笔记_78_ Android开发中使用软引用和弱引用防止内存溢出

在<Effective Java 2nd Edition>中,第6条"消除过期的对象引用"提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过"弱引用"相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>