- 浏览: 434979 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
yehuiyan8002:
支持中文查询
快熟查找联系人 -
lehehe:
现成的接口,免费试用,http://www.haoservic ...
天气Widget -
D.Z:
android:focusable="false&q ...
CheckBox在ListView 而导致其OnItemClickListener不会被触发 -
freecode:
碰到该问题,CheckBox的android:focusabl ...
CheckBox在ListView 而导致其OnItemClickListener不会被触发 -
echohfut:
哥们,新博客是不是在墙外啊?不能访问。还有你怎么进行博客迁移的 ...
博客 迁移
Thread&Handle
本次以进度提示为例 讲解Thread&Handle的使用
[前提]
1. Thread * 启动:start() * 停止:stop() * 定制化: 填充 void run() 2. Handler * 使用: sendMessage() / sendEmptyMessage() * 接受&处理:定制化 void handleMessage(Message message)
典型用法:
public class ThreadUsage extends Activity { public final static int MESSAGE_SAMPLE = 19; TextView text; ProgressBar pBar; Handler sHandler; Thread sThread; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); text = (TextView)findViewById(R.id.text); sThread = new Thread(){ public void run(){ while(true){ try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Message m = new Message(); m.what = MESSAGE_SAMPLE; sHandler.sendMessage(m); } } }; sThread.start(); sHandler = new Handler(){ public void handleMessage(Message msg) { int i = msg.what; if(i == MESSAGE_SAMPLE){ String s = text.getText().toString(); text.setText(s+"."); } else { //un-support message type } } }; } }
[代码 步骤]
1. 定义 running.xml 布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/text" android:paddingLeft="10dip" android:text="is running" /> <TextView android:layout_width="100dip" android:layout_height="wrap_content" android:id="@+id/progress" android:text="................." /> <Button android:layout_width="100dip" android:layout_height="wrap_content" android:id="@+id/buttonOK" android:text="OK!" /> </LinearLayout>
2. 定义 RunningDialog 构造函数 并根据参数 创建目标AlertDialog
public RunningDialog(Activity a,String title,Drawable d){ activity = a; initialView(activity); aBuilder = new AlertDialog.Builder(activity); aBuilder.setTitle(title).setIcon(d).setView(runningView); aDialog = aBuilder.create(); installUpdate(); }
private void initialView(Activity a){ runningView = a.getLayoutInflater().inflate(R.layout.running, null); progress = (TextView)runningView.findViewById(R.id.progress); btnOK = (Button)runningView.findViewById(R.id.buttonOK); btnOK.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub end(); } }); }
3. 定义Thread&Handle 定时刷新TextView显示
private void installUpdate(){ updateHandler = new Handler(){ public void handleMessage(Message msg) { int i = msg.what; if(i == MESSAGE_TOGO){ updateProgress(); } else { //un-support message } } }; updateThread = new Thread(){ public void run(){ while(true){ try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Message m = new Message(); m.what = MESSAGE_TOGO; updateHandler.sendMessage(m); } } }; } private void updateProgress(){ count++; String string = progress.getText().toString(); if(count >= 10){ progress.setText("."); count = 0; } else { progress.setText(string+"."); } progress.setTextSize(20); }
4. 定义2个函数 分别用于显示/取消该AlertDialog
public void start(){ if(isResume){ updateThread.resume(); } else { updateThread.start(); isResume = true; } aDialog.show(); } public void end(){ updateThread.stop(); aDialog.dismiss(); updateThread.resume(); }
5. 如何使用:
public class RunningDialogTest extends Activity { RunningDialog rDialog; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Drawable d = this.getResources().getDrawable(R.drawable.icon); rDialog = new RunningDialog(this,"HelloRunning!",d); findViewById(R.id.button).setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub rDialog.start(); } }); } }
6. emulator 运行截图:
done! ~~~
- RunningDialogTest.rar (31.8 KB)
- 下载次数: 33
发表评论
-
滑动抽屉 另一种解决办法
2010-07-09 17:43 0滑动抽屉 -
Spinner 定制化 增强版
2010-07-09 14:34 2617Spinner 作为下拉选 ... -
ListView 内容之分批显示
2010-06-25 20:38 5947ListView 内容循环显示 大家试想 假如 ... -
MediaScanner 研究
2010-06-23 15:21 3190MediaScanner 之所以拿MediaSc ... -
CheckBox在ListView 而导致其OnItemClickListener不会被触发
2010-06-22 20:55 19047CheckBox在ListView 而导致其OnItemCli ... -
获取Launcher 启动列表
2010-06-22 10:09 3145获取Launcher 启动列表 即 列出所有Launc ... -
PreferenceActivity 全接触
2010-06-19 12:53 9451PreferenceActivity 为了引入 ... -
android src 下载 编译 安装 全接触
2010-06-12 14:44 0android src - download install ... -
Intent.createChooser() 妙用
2010-06-12 11:14 5961Intent.createChooser(ntent targ ... -
SMS管理:收信箱 发信息 编写新信息
2010-06-07 08:14 14474SMS管理 [功能] 1. 收信箱:显示 ... -
求 android 手机 帮忙测试sms服务系统 谢谢
2010-06-05 08:25 1459Hi guys, 最近一段时间没有更新blog 因为一 ... -
流媒体 播放 理论篇
2010-05-28 14:42 2251流媒体播放 之所以为理论篇 因为该篇仅实现了播放功能 ... -
NDK 搭建与HelloWorld
2010-05-19 09:48 3234NDK [前提] 1. Cygwin 用于安装 ... -
自定义字体
2010-05-15 10:49 1229自定义字体: []代码 步骤] 1 ... -
模糊查找 再深入
2010-05-15 09:41 3167模糊查找 再深入 应某位大哥要求 再次对 SQLite ... -
快捷方式Bar + ViewGroup - 自定义
2010-05-09 09:20 2488TabActivity - 自定义 其实 这篇感觉极鸡 ... -
View 拖动&插入 研究
2010-05-09 07:14 3990View 拖动&插入 即: ... -
带图标 快捷键 Menu - 终极版
2010-05-04 20:23 1849Menu 改头换面 扩展如下: 1. 图标化文字 2 ... -
*.gif 解码 - 实践
2010-05-02 18:58 1754*.gif decode 前面已经说过 今天不打算再说了 ... -
*.gif 解码 - 理论
2010-05-01 21:11 1527我们知道Android 默认是不支持*.gif 的 但是 ...
相关推荐
理解并熟练掌握Thread和Handler的使用对于开发高性能、流畅的Android应用至关重要。正确地在后台线程执行耗时任务并利用Handler返回结果到主线程,可以避免UI冻结,提高用户体验。在实际项目中,还可以结合使用`...
综上所述,“Android-Handle-Thread.rar”中的内容将帮助开发者深入理解Android中线程和Handler的使用,提升应用的并发处理能力,优化用户界面的响应性能。通过学习和实践,开发者能够更自如地应对复杂的多线程场景...
要创建一个新的线程,需要通过 `Thread.start()` 或使用 `ExecutorService` 等方法。Handle 的目的是协调不同线程之间的通信,而不是直接创建新线程。 接下来,我们来看消息队列(Message)。Message 是 Android 中...
- 在子线程中,使用`threadHandler`发送一个Message,指定目标为`mainHandler`。 - Message中可以携带数据,例如通过`Message.obj`或`Message.what`设置。 - `mainHandler`在主线程接收到Message后,执行回调方法...
5. **中断处理**:RTT支持中断服务,`rt_interrupt_enter`和`rt_interrupt_leave`用于中断上下文的切换,`rt_hw_interrupt_handle`处理中断事件。 6. **设备驱动**:RTT提供了统一的设备驱动接口,如I/O操作,`rt_...
本示例将探讨如何使用Handle机制来实现一个简单的计时器功能。Handle,通常指的是Android中的Handler类,它与Looper和Message配合,用于在Android主线程中进行消息处理和更新UI。以下是对这个"简单的handle demo ...
而传统的 Thread 类则可以自定义线程逻辑,但需要注意的是,直接在 Thread 中更新 UI 会导致 CalledFromWrongThreadException 异常,所以通常需要配合 Handler 使用。 总的来说,Android 多线程管理的核心在于合理...
在Android系统中,线程管理是非常关键的一部分,尤其是在创建高性能和响应迅速的应用程序时。本文主要探讨了Android的进程和线程模型,以及如何在多线程环境下有效地更新UI。 首先,我们来看Android的进程机制。...
工作线程(Worker Thread)是为了执行耗时操作而创建的,例如网络请求、数据库操作等,这样可以避免阻塞主线程。在工作线程中,我们同样可以创建一个`Handler`实例,但这个`Handler`与主线程的`Handler`不同,它用于...
本篇文章将详细讲解如何使用Java手写实现Android的Handler机制,以及背后的原理。 首先,我们需要理解Android的主线程,也被称为UI线程,它是负责处理用户交互和更新界面的线程。当需要在后台执行耗时任务时,我们...
标题和描述中提到了几个关键的C++辅助类库,包括用于异步处理的`Thread`,确保对象安全释放的`CHandle`,资源管理的`Guard`,以及XML解析的`rapidxml`。下面将对这些知识点进行详细解释。 1. **异步进行-Thread**:...
C++基础辅助类库,比如异步进行-Thread,安全句柄-CHandle,资源守卫-Guard,XML解析-rapidxml,以及其他注册表、文件基础操作。用于更加高效、安全的进行C++开发。温馨提示:至少需要支持C++0x标准的编译器。
本文将深入探讨Android多线程中的数据传递以及如何通过Handle实现UI更新。 首先,我们了解下Android线程的基本概念。Android应用主要运行在主线程,也称为UI线程,负责处理用户交互和更新UI。由于主线程不允许执行...
五、使用Thread.exe和Thread 提供的"Thread.exe"可能是用于演示线程操作的示例程序。它可能包含了创建、运行、暂停、恢复和中断线程的代码实例。通过反编译或查看源代码(如果提供),可以更好地理解线程管理的实际...
综上所述,"TimerCount:计时器,Thread + Handle更新UI" 的核心内容涉及了Java中的计时器使用、多线程编程、UI更新的线程安全策略以及可能的项目组织结构。通过分析`TimerCount-master` 文件夹中的代码,我们可以...
本文将深入探讨如何在RTThread上为STM32F103ZET6实现消息队列功能,并基于“实验0-1 Template工程模板-新建工程章节使用”进行解析。 首先,理解消息队列的概念至关重要。消息队列是一种进程间通信(IPC)机制,...
在Android开发中,Handle类是实现线程间通信和异步处理的核心工具。它与Looper、Message紧密配合,使得在...在实际项目中,Handle常与其他组件(如AsyncTask、BroadcastReceiver等)结合使用,以实现更复杂的业务逻辑。
C++基础辅助类库,比如异步进行-Thread,安全句柄-CHandle,资源守卫-Guard,XML解析-rapidxml,以及其他注册表、文件基础操作。用于更加高效、安全的进行C++开发。温馨提示:至少需要支持C++0x标准的编译器。 C++...
通过使用std::thread类,程序员可以创建新的线程来执行特定的任务,从而实现程序的多线程并行处理。 首先,std::thread类的成员函数提供了丰富的接口来控制线程的行为。例如,get_id成员函数可以获取线程的ID,它...