- 浏览: 761076 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (139)
- 玩转Android (48)
- Android创意美工 (0)
- Android杂谈 (23)
- Android实例练习 (2)
- Android ROM研究 (5)
- Android NDK开发指南 (5)
- Android NDK (0)
- Android Tips (3)
- Windows Phone 7 (5)
- iPhone (0)
- HTML5学习室 (0)
- JAVA (9)
- SSH+ibatis (8)
- PHP (0)
- IT生活 (1)
- linux (2)
- C (4)
- C++ (1)
- web 前端 (1)
- 云计算 (0)
- 设计模式 (0)
- C# (2)
- 其他 (1)
- 数据结构 (5)
- Web开发 (10)
- 数据库 (3)
- 搜索引擎 (0)
- Go语言 (0)
最新评论
-
wi100sh:
多谢分享~
玩转Android---UI篇---ImageButton(带图标的按钮) -
zhanghaichang:
好文章的。
高性能web开发技术(一) -
yingang:
引用classes.dex.dex2jar.jar 拖入 j ...
Andorid杂谈---Apk文件的反编译 -
扶摇诺:
讲解的简明易懂,多谢啦!
玩转Android---UI篇---LinearLayout(线性布局) -
a13429921973:
更为详细的图文介绍,可参考这个http://blog.csdn ...
Android ROM研究---CyanogenMod源代码下载及编译
public class
Handler
extends Object
java.lang.Object
*android.os.Handler
直接子类:
AsyncQueryHandler:一个帮助你处理异步ContentResolver查询的类
AsyncQueryHandler.WorkerHandler
HttpAuthHandler:Http认证要求用户界面必须处理
SslErrorHandler:SslErrorHandler.class负责处理SSL错误的类
一个Handler允许你发送和处理和线程的消息队列有关的消息和Runnable对象,每个线程实例都与一个单独的
线程和线程的消息队列有关,当你创建了一个新的Handler(句柄),它必然会创建一个thread/Message队列,
从这一点上,它会传送消息和Ruuuable到消息队列,并执行它们,因为它们从消息队列出来
使用Handler有两个主要的用途:
(1)在以后的某个点执行计划的messages和runnables
(2)在你自己所在线程不同的线程中进入一个action并执行
计划好的消息可以用 post(Runnable), postAtTime(Runnable, long), postDelayed(Runnable, long),
sendEmptyMessage(int), sendMessage(Message), sendMessageAtTime(Message, long),
和 sendMessageDelayed(Message, long) 这些方法。在后期的版本中允许插入一个Runnable对象
(当你接受到由message队列调用的对象);sendMessage函数允许你通过Handler的handleMessage(Message)
方法(要求你实现一个Handler的子类)来插入一个包含捆绑的数据的消息对象。
当发送消息的时候,你可以允许这些在消息队列中的item尽快的被处理,或者在被处理或者指定的时间内被
处理之前设置一个延迟,后两个允许你实现超时和其他时序行为。
当应用程序创建一个进程,它的主线程专门用于运行管理顶层的应用程序对象(活动,广播接收机等)和
他们所创建的任何床空的消息队列。您可以创建自己的线程,通过Handler来与你的主应用程序进行沟通。、
这是在post()和sendMessage()方法被调用之前要做的,而不是从你的新线程开始。计划的runnable和
message在适当的时候就会在Handler的message队列中并且被处理。
概览:
interface Handler.Callback :回调接口,你而已实例化一个Handler来避免不得不实现你子类的Handler
公共构造方法 :
---------------
Handler():当前线程在队列中与handler关联的默认构造方法 Handler(Handler.Callback callback):当前线程和通过处理消息而得到的回调接口关联的构造方法 Handler(Looper looper):使用提供的这个队列替换默认的那一个 Handler(Looper looper,Handler.Callback callback):使用提供的这个队列替换默认的那一个并且通过处理消息而的得到一个回调接口
公共方法:
public void dispatchMessage (Message msg)
处理系统信息
public final void dump (Printer pw, String prefix)
public final Looper getLooper ()
public void handleMessage (Message msg)
子类必须implements它才能接收消息
public final boolean hasMessages (int what, Object object)
public final boolean hasMessages (int what)
检查在消息发送期间是否在消息队列中有'what'
public final Message obtainMessage (int what, int arg1, int arg2)
就像objectMessage()一样,除了它还要设置what,arg1,arg2等几个返回的参数
参数
返回值传递给Message.what |
返回值传递给Message.arg1 |
返回值传递给Message.arg2 |
Returns
- 一个来自全局消息池的消息
public final Message obtainMessage ()
public final Message obtainMessage (int what, int arg1, int arg2, Object obj)
参数
返回值传递给 Message.what |
返回值传递给 Message.arg1 |
返回值传递给 Message.arg2 |
返回值传递给 Message.obj |
Returns
- 一个从公共消息池中得到的消息
public final Message obtainMessage (int what)
public final Message obtainMessage (int what, Object obj)
public final boolean post (Runnable r)
Parameters
可以被执行的Runnable对象 |
Returns
- 如果Runnable对象成功插入到消息队列中就返回true. 如果失败返回false,一般是因为退出了循环处理消息队列
public final boolean postAtFrontOfQueue (Runnable r)
Parameters
The Runnable that will be executed. |
Returns
- Returns true if the message was successfully placed in to the message queue. Returns false on failure, usually because the looper processing the message queue is exiting.
public final boolean postAtTime (Runnable r, Object token, long uptimeMillis)
Returns
- 如果能成功添加到消息队列返回true,失败返回false,通常是因为退出了循环处理消息队列。注意,返回true并不代表Runnable对象可与被处理---如果如果超过了传送时间的户,消息就会被放弃,循环退出
public final boolean postAtTime (Runnable r, long uptimeMillis)
public final boolean postDelayed (Runnable r, long delayMillis)
public final void removeCallbacks (Runnable r)
public final void removeCallbacks (Runnable r, Object token)
public final void removeCallbacksAndMessages (Object token)
public final void removeMessages (int what)
public final void removeMessages (int what, Object object)
public final boolean sendEmptyMessage (int what)
Returns
- 如果消息成功的被放置到了消息队列,返回true,如果失败返回false,通常是由于退出了循环处理消息队列
public final boolean sendEmptyMessageAtTime (int what, long uptimeMillis)
public final boolean sendEmptyMessageDelayed (int what, long delayMillis)
public final boolean sendMessage (Message msg)
public final boolean sendMessageAtFrontOfQueue (Message msg)
public final boolean sendMessageDelayed (Message msg, long delayMillis)
上面全是理论性的东西,而且不一定全看懂,现在用一个实例来演示一下它的作用
package com.loulijun.handlertest; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.Button; import android.widget.Toast; public class HandlerTestActivity extends Activity { private Button start; ProgressDialog dialog = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); dialog = new ProgressDialog(HandlerTestActivity.this); dialog.setTitle("下载文件"); dialog.setMessage("正在下载中..."); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); dialog.setIcon(android.R.drawable.ic_input_add); dialog.setIndeterminate(false); dialog.setCancelable(true); start = (Button)findViewById(R.id.start); start.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { dialog.show(); handler.post(updateThread); } }); } Handler handler = new Handler() { public void handleMessage(Message msg) { dialog.setProgress(msg.arg1); handler.post(updateThread); } }; Runnable updateThread = new Runnable() { int i = 0; public void run() { i = i + 1; Message msg = handler.obtainMessage(); msg.arg1 = i; try { Thread.sleep(100); }catch(InterruptedException e) { e.printStackTrace(); } handler.sendMessage(msg); if( i == 100) { handler.removeCallbacks(updateThread); dialog.dismiss(); Toast.makeText(getApplicationContext(), "下载完成!", Toast.LENGTH_SHORT).show(); } } }; }
发表评论
-
玩转Android---2D图形及动画---动画分析(Tween详细分析)
2011-09-26 21:59 2628在Android系统中提供了两种动画实现方式:一种是Tween ... -
玩转Android---2D图形及动画---图片处理
2011-09-26 13:08 1781在Android中很多地方都使 ... -
玩转Android--UI篇--PreferenceActivity(开启wifi和音乐等)
2011-09-01 11:57 4852本测试主要是为了测试PreferenceActivity的使用 ... -
玩转Android---2D图形及动画---Gif动画
2011-08-05 09:36 2221由于Gif本身就是动画,所以如果能够直接使用的话,会省去很多的 ... -
玩转Android---2D图形及动画---Frame动画
2011-08-01 20:53 2087Frame动画其实就是逐帧动画,用法也比Tween动画简单,只 ... -
玩转Android---2D图形及动画---Tween动画
2011-07-31 22:53 2180Android平台提供了两类动画,分别是Tween动画,和Fr ... -
玩转Android---2D图形及动画---View类使用
2011-07-30 23:39 2801由于游戏界面是由大量美工资源图片构成的,所以,在设计游戏界面的 ... -
玩转Android---UI篇---ZoomControls放大缩小图片
2011-07-27 13:03 7249ZoomControls控件是一个可以缩放但控件,效果如下图 ... -
玩转Android---组件篇---TextSwitcher
2011-07-25 09:21 2194还记得有一次淘宝的电话面试的时候问了我一个关于Android的 ... -
玩转Android---组件篇---AnalogClock,DigitalClock
2011-07-10 19:28 2942首先要说的是,这两个控件并不是经常的使用,但是如果程序需要的话 ... -
玩转Android---组件篇---SeekBar,RatingBar,Chronometer
2011-07-10 19:12 2859今天补充三个组件的使用,避免日后忘记。它们分别是 SeekB ... -
玩转Android---组件篇---Handler的使用(2)
2011-05-28 17:15 2823对于Handler来说,它和与它调用它的Activity是出于 ... -
玩转Android---组件篇---Handler的使用(1)
2011-05-28 15:37 2175在android中,有很多功能是不能放在onCreate或者o ... -
玩转Android---事件监听篇---第2篇
2011-05-27 10:30 5252事件监听篇---第二篇 下面是各种常用控件的事件监听的 ... -
玩转Android---事件监听篇---第1篇
2011-05-26 21:29 9933事件就是用户与UI界面的交互时所触发的操作。比如点击某一个按钮 ... -
玩转Android---组件篇---数据存储之SQLite
2011-04-17 17:05 8486Android中通过SQLite数据库引擎来实现结构化数据存储 ... -
玩转Android---组件篇---数据存储之File
2011-04-17 11:07 2047我们可以将一些数据直接以文件的形式保存在设备中。例如,一些文本 ... -
玩转Andorid---组件篇---数据存储之preference
2011-04-14 21:58 2304程序是数据的输入、处 ... -
玩转Android---组件篇---Broadcast Receiver(广播接收器)
2011-04-14 19:24 29350Braodcast Receiver顾名思义 ... -
玩转Andorid---组件篇---Service(服务)之RPC远程进程调用
2011-04-08 21:17 3466在Andorid平台中,各个组件运行在自己的进程中,他们 ...
相关推荐
此外,Handler还可以与其他组件(如Service、BroadcastReceiver等)配合使用,实现更复杂的异步通信场景。 在实际开发中,常常结合AsyncTask、IntentService等其他异步处理方式一起使用,以应对各种复杂的线程同步...
本篇文章将深度剖析名为“CatchThePigeonAndroid”的项目,揭示其背后的Android编程原理和技术细节。 一、项目概述 “CatchThePigeonAndroid”项目,顾名思义,很可能是一款基于Android平台的游戏应用,旨在捕捉...
Android应用通常由Activity、Service、BroadcastReceiver、ContentProvider和Intent等组件构成。在这个项目中,Activity将是游戏的主要界面,负责处理用户交互。开发者需要利用Android的布局管理器如LinearLayout、...
开发Android游戏通常使用Java语言,而Android Studio是官方推荐的集成开发环境(IDE)。对于俄罗斯方块这样的2D游戏,开发者通常会利用Android的SurfaceView或Canvas进行图形绘制,以及 Handler 和 Runnable 结合...
学习使用AsyncTask、Handler、Thread或Runnable等多线程技术,有助于理解源代码的异步处理机制。 7. **数据持久化** 如果源代码包含了保存和加载游戏进度的功能,那么你需要了解SharedPreferences、SQLite数据库或...
这个项目标题“时间 android 自定义时钟”暗示我们将会探讨如何在Android应用中创建一个定制化的时钟组件。下面将详细介绍这个主题。 首先,让我们了解Android中的时间显示。Android系统提供了许多内置的API来处理...
在Android平台上,Canvas是用于2D图形绘制的核心组件,它提供了丰富的绘图API,使得开发者可以自由地在屏幕上画出各种形状、线条、图像等。本项目“Android Canvas 简单打地鼠游戏”就是一个利用Canvas进行游戏开发...
避免ANR的方法包括使用异步任务、服务或Handler来处理长时间运行的任务。 2. **Force Close**:当程序出现未捕获的异常并终止时,会触发Force Close。通过充分测试和异常处理,可以预防这种情况。虽然不能直接捕获...
3. **2D图形绘制**:Android提供了Canvas和SurfaceView等组件用于绘制2D图形。游戏中的角色、障碍物和背景等元素都需要通过这些API来绘制。 4. **物理引擎**:为了模拟真实的跳跃效果,涂鸦跳跃可能会使用简单的...
4. **Intent机制**:Intent用于启动其他组件,如Activity或Service,它是Android系统中组件间通信的主要方式。 5. **布局设计**:XML布局文件用于定义用户界面,学习如何使用LinearLayout、RelativeLayout、...
通过这个项目源码的学习,开发者不仅能掌握Android基本组件的使用,还能深入理解游戏开发的生命周期、动画制作、音频处理以及用户体验设计等方面的知识。对于想要提高Android编程技能,尤其是游戏开发能力的开发者来...
一个Android游戏通常包含Activity(应用程序组件)、Layout(界面布局)、Drawable(图像资源)以及Java代码等部分。在这个项目中,主Activity将承载游戏的主要逻辑,而Layout文件则定义了用户界面的布局。图片资源...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建具有独特功能和交互的视图组件。这个简易五子棋小游戏就是这样一个实例,它展示了如何将自定义View应用于游戏开发中。下面我们将深入...
5. **炸弹定时爆炸**:这需要使用到Android的计时器(如CountDownTimer或Handler/Runnable组合)来设置定时触发事件,比如炸弹爆炸。同时,还需要考虑爆炸的动画效果,这可能需要用到Animation类或者自定义动画库。 ...
【安卓版俄罗斯方块】是一款经典的休闲益智游戏,它基于传统的俄罗斯方块玩法,针对Android操作系统进行了适配和优化。这款安卓版的俄罗斯方块不仅保留了原版游戏的核心乐趣,还可能加入了新的功能和视觉效果,为...
"安卓口袋微博"是一款针对Android平台开发的应用程序,它提供了便捷的微博浏览、发布和互动功能,让用户在手机上也能轻松玩转社交网络。这款应用的开发涉及到Android平台的Java编程语言,以及Web服务的交互,是...
总结,制作Android版的“俄罗斯方块”涉及到了Android基础组件的使用、自定义View的绘制、游戏逻辑的实现以及性能优化等多个方面,对于Android开发者来说,这是一个很好的学习和实践项目,有助于加深对Android开发的...
可以使用`AsyncTask`或者`Handler`来实现异步操作,这样即使在蓝牙通信过程中,用户仍能正常与界面交互。 **6. 对战匹配** 为了让两个设备能够配对并开始游戏,需要实现一个匹配过程。这可能涉及到扫描、连接和断开...
在开发“俄罗斯方块”时,我们需要理解Java的基本语法、面向对象编程概念,以及如何使用Java的图形用户界面(GUI)组件。 三、Android Studio与Java结合开发 1. 创建项目:首先,打开Android Studio,选择“Start a...