安卓开发学习——第八天

1.消息机制的引入
  1)在android中,只有在UIThread中才能直接更新界面
  2)在android中,长时间的工作(联网)都需要在workerThread中执行
  3).在分线程获得服务器数据后,需要立即到主线程去更新界面显示数据

如何实现线程间通信呢?
  消息机制:Handler+Thread
  异步任务:AsyncTask==Handler+ThreadPool

2.Message的使用:线程间通信的数据载体

1).对象的创建
  Message.obtain();

2)对象的使用
  int what //标识
  int args1 //用户保存int数据
  int args2 //用户保存int数据
  Object obj //用户保存对象数据

  Handler target //保存处理消息的handler
  long when //消息应该被处理的时间
  Message next //有了此属性Message就可以形成队列
  static Message pool //消息池,缓存用过的消息用于复用
  Runnable callback //用于处理当前消息的回调器

3.Handler的使用:发送/处理/移除消息

  1)对象的创建:new Handler();
  2)对象的使用:
   a.发送消息
    发即时消息:sendMessage(Message message)
    发延迟消息:sendMessageDelayed(Message message,long delayTime)
    发即时空消息:sendEmptyMessage(int what)
    发延迟空消息:sendEmptyMessageDelayed(int what,long delayTime)
    b.处理消息
     void handleMessage(Message msg)
   c.移除消息
    removeMessage(int what) //移除未处理的指定what的message
    removeCallbacksAndMessages(null); //移除所有未处理的消息
安卓开发学习——第八天

4.消息机制的原理
安卓开发学习——第八天
安卓开发学习——第八天

Handler用于做什么工作?
  1.线程间通信(分线程间切换到主线程运行)
  2.延迟的工作
  3.循环定时工作

5.AsyncTask的使用
 1).理解
  a.在没有它之前我们可用Handler+Thread实现一个异步任务的功能
  b.使用AsyncTask也可以,为什么要用它?
   1.编码简洁:填空题与问答题的区别
   2.运行效率高:线程池
 2).相关API
安卓开发学习——第八天

6.AsyncTask的基本原理
安卓开发学习——第八天

7.Json数据格式和解析
 1).Json是什么?
  a.有特定格式的字符串
  b.用于客户端与服务器的数据交互的一种数据格式
  c.与XML比较的优势?
    小,简洁
   省流量/响应快
 2).Json数据格式
安卓开发学习——第八天
 3).如何解析Json?
安卓开发学习——第八天
  JSONBbject: {}
  JSONArray: []
  Gson
   String toJson(Object obj)
   T fromJson(String json,Type/Class type)
8.图片的三级缓存技术

1).图片的三级缓存
  ①.第一级:内存中Map <String,Bitmap> key为url,value为图片对象
  ②.第二级:SD卡 图片文件 /storage/sdcard/Android/data/packageName/files/
  ③第三级:服务器端 图片文件

2).如何根据图片URL显示图片
  ①根据URL从一级缓存中取出对应的Bitmap对象,
   如果有,直接显示
   如果没有进入②
  ②根据URL从二级缓存中得到Bitmap对象(从URL中取出文件名到files文件夹下加载图片文件)
   如果有,直接显示,并保存到一级缓存
   如果没有进入③
  ③根据URL请求服务器(三级缓存)获取Bitmap对象,需要启动分线程请求,显示代表正在加载的图片
   如果有
      1).显示图片
      2).保存到一级缓存
      3).保存到二级缓存
   如果没有
    显示代表错误的图片