前言

  学习android一段时间了,为了进一步了解android的应用是如何设计开发的,决定详细研究几个开源的android应用。从一些开源应用中吸收点东西,一边进行量的积累,一边探索android的学习研究方向。这里我首先选择了jwood的 Standup Timer项目。本文将把研究的内容笔记整理,建立一个索引列表。

关键词

  Android.os.Handler涉及较多的知识点,我把一些关键词列举在下面,将主要介绍Handler:
  •   android.os.Handler、android.os.Handler.Callback
  •   Looper、
  •   Threadle、Runnable
  •   Message、Message queue

android.os.Handler

  Handler在android里负责发送和处理消息。它的主要用途有:   1)按计划发送消息或执行某个Runnanble(使用POST方法);   2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程)   默认情况下,Handler接受的是当前线程下的消息循环实例(使用 Handler( Looperlooper)、 Handler( Looperlooper, Handler.Callbackcallback)可以指定线程),同时一个消息队列可以被当前线程中的多个对象进行分发、处理(在UI线程中,系统已经有一个Activity来处理了,你可以再起若干个Handler来处理)。在实例化Handler的时候,Looper可以是任意线程的,只要有Handler的指针,任何线程也都可以sendMessage。Handler对于Message的处理不是并发的。一个Looper 只有处理完一条Message才会读取下一条,所以消息的处理是阻塞形式的(handleMessage()方法里不应该有耗时操作,可以将耗时操作放在其他线程执行,操作完后发送Message(通过sendMessges方法),然后由handleMessage()更新UI)。

倒计时程序

  利用Timer 编写一个倒计时程序,程序使用Timer和TimerTask来完成倒计时,同时使用sendMessages方法发送消息,然后在HanleMessage里更新UI。 Activity布局: Layout

这里使用TextView 来显示倒计时的时间变化,两个按钮用于控制时间的开始和停止。SeekBar主要是用于查看线程是否被阻塞(阻塞时无法拖动)。 onCreate

在onCreate方法中初始化元素个元素,myHandler = new Handler(this); 调用的是 Handler( Handler.Callbackcallback)构造函数,在回调方法callback中对发送来的消息进行处理(这样我们就不必使用内部类的写法来 重写HandleMessage()方法了),因此Activity必须实现 android.os.Handler.Callback接口。我们还在将onCreate 方法的ThreadId 记录在了Log中用以和消息发送、处理时所作的线程进行比较。 发送消息

实现Button按钮的事件处理以此进入倒计时操作。这里使用的Timer 来执行定时操作(其实我们完全可以另起一个线程)。Task类继承了TimerTask类,里面增加了一个任务处理接口来实现回调模式,应此Activity需要实现该回调的接口ITaskCallBack(这样做是因为我比较不喜欢内部类的编写方法)。 ICallBack接口和Task类

这是Java的回调函数的一般写法。 实现CallBack

  可以看到实现 android.os.Handler.Callback接口,其实就是对handleMessage()方法进行重写(和内部类的一个区别是,内部类的返回值是Void)。

运行结果

  可以看到在onCreate 方法中线程的ID是1(UI线程) 这与 HandlerMessage 进行消息处理时是所作的线程ID是一样的,而消息发送的线程ID则为8非UI线程。

使用Threadle进行实现

Activity类

自定义的线程类

这里继承了Thread类,也可以直接实现 Runnable接口。

关于POST

  Post的各种方法是把一个Runnable发送给消息队列,它将在到达时进行处理。 POST

使用POST的方式 是将Runnable 一起发送给处理的线程(这里为UI),如果Runnable的操作比较耗时的话那线程将进入阻塞状态。可以看到先运行 Runnable的Run方法 然后在进入 HandleMessage() 。我还尝试了另一种写法,将TimerThreadPOST过去,运行结果是一样的。 代码

可以说POST的各种方法主要是用于 “按计划发送消息或执行某个Runnanble(使用POST方法)”。

参考文献

   android学习笔记之消息机制,异步和多线程    android handler概念解释    SDK

系列索引

   Android 开源项目-StandupTimer学习笔记索引
REFRENCES:http://www.cnblogs.com/keyindex/articles/1822463.html

更多相关文章

  1. android的Handler
  2. Android(安卓)滑动手势侦测方法介绍
  3. Android(安卓)从零开始打造异步处理框架
  4. Android截屏浅析
  5. 安卓selector使用方法
  6. 【EditText】Android设置EditText不可编辑
  7. Android(安卓)AsyncTask 使用
  8. Android里关于EventBus的使用
  9. Android的Message机制(简单小结)

随机推荐

  1. RelativeLayout的常用属性
  2. android之调用webservice 实现图片上传
  3. pygame for android汉字显示问题
  4. Android(安卓)NestedScrolling机制完全解
  5. android - SAX解析XML数据
  6. 自定义ProgressBar
  7. Android(安卓)技术专题系列之十七 -- volum
  8. Android(安卓)Makefile 具体是 如何识别
  9. Android(安卓)ANR分析
  10. Android(安卓)Permission大全