Android学习笔记(十二)

Android学习笔记(十二)

  • 在子线程中更新UI
    • 先定义一个整型常量UPDATE_TEXT,用于表示更新TextView这一动作。
    • 新增一个Header对象,并且重写父类的handleMessage方法,更新UI程序填写在这里。
    • 在子线程中创建一个Message对象,并将其what字段的值指定为UPDATE_TEXT,然后调用Handler的sentMessage()方法中将这条Message发送出去
  • 异步消息处理机制
    • 组成
      1. Message:在线程之间传递的消息。有what字段,obj字段和arg1、arg2字段。
      2. Handler:用于发送和处理消息,发送消息使用Handler的sendMessage()方法,处理消息用Handler的handleMessage()方法.
      3. MessageQueue:用于存放所有通过Handler发送的消息。
      4. Looper,调用Looper的Loop()方法后,就会进入到一个无线循环中,每当MessageQueue中存在一条消息,就会将它取出,传递到Handler的handleMessage()方法中
    • 流程
      1. 在主线程中创建一个Handler对象,重写handleMessage()方法。
      2. 当子线程需要进行UI操作时,就创建一个Message对象,并通过Handler将这条消息发送出去。
      3. 之后这条消息会被添加到MessageQueue的队列中等待处理。
      4. Looper一直尝试从MessageQueue中取出待处理消息,最后分发回Handler的handleMessage()方法中。
  • AsyncTask:一个抽象类
    • 继承AsyncTask的子类,指定三个泛型参数:例如class DownloadTask extends AsyncTask
      1. Params:在执行AsyncTask时需要传入的参数
      2. Progress:后台任务执行时,如果需要在界面上显示当前的进度,则使用这里指定的泛型作进度单位
      3. Result:当任务执行完成后,如果需要对结果进行返回,则使用这里指定的泛型作为返回值类型
    • 重写AsyncTask中的几个方法才能完成对任务的定制:
      1. onPreExecute():在后台任务开始执行前调用,用于进行一些界面上初始化的操作。
      2. doInBackground(Params…):这个方法中的代码在子线程中运行,一旦完成就可以通过return语句将语句来将任务的执行结果返回。更新UI元素,通过调用publishProgress(Progress…)方法来完成
      3. onProgressUpdate(Progress..):当在后台任务中调用publishProgress(Progress…)方法后,这个方法就会很快被调用,方法中携带参数就是后台任务中传递过来的。在这个方法中就可以根据参数的数值对UI进行不同的操作。
      4. onPostExecute(Result):当后台任务执行完毕并且通过return语句进行返回时,这个方法就会被调用,返回的数据作为参数传递到此方法中,可以利用其进行一些UI操作。
  • 服务
    • 定义一个服务:
      1. 新建一个Myservice类继承于Service的服务
      2. 重写onBind(),onCreate(),onStartCommand(),onDestroy()方法,其中onCreate()方法会在服务创建的时候调用,onStartCommand()方法会在每次服务启动的时候调用,onDestory()方法会在服务销毁的时候调用。
      3. 在AndroidManifest.xml文件中进行注册才能生效。

你可能感兴趣的:(android,android)