1.MCV模式

  • 网络层

    • 网络封装
    • 编写通信工具
    1. http

      • HttpClient比HttpURLConnection稳定性好很多
    2. socket

  • 业务层

    • 公共信息处理
    • 用户业务处理
    • 降低层与层之间的耦合度
  • 视图层

    • 统一界面的管理

2.服务器推送方案

使用最多的是xmpp开源项目,支持的服务器较多,如用于聊天的openfire服务器,用于推送的androidpn服务器

  • 1.轮询,定期到检查是否有新消息(常用,但较消耗资源)
  • 2.socket的长连接

3.内存溢出的处理

  • 1.在内存上做些处理,如使用软引用,强化引用,弱引用
  • 2.在内存中加载图片的时候直接在内存中做处理,如边界的压缩

    大图缓存导致内存溢出的解决办法:

    1
    2
    3
    4
    5
    6
    //分别保存包名到Bitmap的强引用的映射和软引用的映射
    private static LinkedHashMap<String, Bitmap> hardManager; private static ConcurrentHashMap<String, SoftReference<Bitmap>> softManager;
    //在通过包名获取bitmap时,首先在hardManager中判断是否包含该包名,如果有,直接取出;如果没有,则在softManager中判断,有则取出,没有就通过下面方法获取
    private static Bitmap readBitMap(Context context, int resId) { BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inPreferredConfig = Bitmap.Config.RGB_565; opt.inPurgeable = true; opt.inInputShareable = true; // 获取资源图片 InputStream is = context.getResources().openRawResource(resId); return BitmapFactory.decodeStream(is, null, opt); }
    //获取之后插入到hardManager中,在插入时,做判断只保证hardManager的容量为10,如果大于10,就将最早插入的删除,这样就保证了我们使用大图片时不会造成内存溢出这个问题
  • 3.动态的回收内存

  • 4.优化Dalvik虚拟机堆内存的分配
  • 5.自定义堆内存大小

4.适配0px设置法

layout_height=0px,结合layout_weight,却可以使控件成正比例显示