- 浏览: 427402 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
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 2574Spinner 作为下拉选 ... -
ListView 内容之分批显示
2010-06-25 20:38 5866ListView 内容循环显示 大家试想 假如 ... -
MediaScanner 研究
2010-06-23 15:21 3105MediaScanner 之所以拿MediaSc ... -
CheckBox在ListView 而导致其OnItemClickListener不会被触发
2010-06-22 20:55 18885CheckBox在ListView 而导致其OnItemCli ... -
获取Launcher 启动列表
2010-06-22 10:09 3098获取Launcher 启动列表 即 列出所有Launc ... -
PreferenceActivity 全接触
2010-06-19 12:53 9393PreferenceActivity 为了引入 ... -
android src 下载 编译 安装 全接触
2010-06-12 14:44 0android src - download install ... -
Intent.createChooser() 妙用
2010-06-12 11:14 5918Intent.createChooser(ntent targ ... -
SMS管理:收信箱 发信息 编写新信息
2010-06-07 08:14 14367SMS管理 [功能] 1. 收信箱:显示 ... -
求 android 手机 帮忙测试sms服务系统 谢谢
2010-06-05 08:25 1413Hi guys, 最近一段时间没有更新blog 因为一 ... -
流媒体 播放 理论篇
2010-05-28 14:42 2125流媒体播放 之所以为理论篇 因为该篇仅实现了播放功能 ... -
NDK 搭建与HelloWorld
2010-05-19 09:48 3160NDK [前提] 1. Cygwin 用于安装 ... -
自定义字体
2010-05-15 10:49 1167自定义字体: []代码 步骤] 1 ... -
模糊查找 再深入
2010-05-15 09:41 3105模糊查找 再深入 应某位大哥要求 再次对 SQLite ... -
快捷方式Bar + ViewGroup - 自定义
2010-05-09 09:20 2388TabActivity - 自定义 其实 这篇感觉极鸡 ... -
View 拖动&插入 研究
2010-05-09 07:14 3933View 拖动&插入 即: ... -
带图标 快捷键 Menu - 终极版
2010-05-04 20:23 1788Menu 改头换面 扩展如下: 1. 图标化文字 2 ... -
*.gif 解码 - 实践
2010-05-02 18:58 1654*.gif decode 前面已经说过 今天不打算再说了 ... -
*.gif 解码 - 理论
2010-05-01 21:11 1486我们知道Android 默认是不支持*.gif 的 但是 ...
相关推荐
Thread和Handle的使用,主线程使用Handle和其他线程通过Message进行通信
Android Handle Thread.docx
android handler and thread in program
android demo,实现主线程handle,工作子线程threadHandle的处理.
C++基础辅助类库,比如异步进行-Thread,安全句柄-CHandle,资源守卫-Guard,XML解析-rapidxml,以及其他注册表、文件基础操作。用于更加高效、安全的进行C++开发。温馨提示:至少需要支持C++0x标准的编译器。
关于android 上的多线程的部分的一些介绍
简单的handle demo 实现计时器功能,亲测可用,线程例子,简单的handle demo 实现计时器功能,亲测可用,线程例子
TimerCount 计时器,Thread + Handle更新UI
C++基础辅助类库,比如异步进行-Thread,安全句柄-CHandle,资源守卫-Guard,XML解析-rapidxml,以及其他注册表、文件基础操作
The basic assumption is that context switches among related processes are fast enough to handle each user-level thread by one kernel thread. Kernel processes can have various degree of relationship. ...
which will have the channel mask for dwords 4-7 enabled in the thread, and those dwords will be written to the second URB handle when we brw_urb_WRITE() results.
let handle = thread :: spawn ( move || { println! ( "spawned thread has id {}" , thread_id :: get ()); }); println! ( "main thread has id {}" , thread_id :: get ()); handle. join (). unwrap (); 这将...
fun_handle = Thread_rfc_com->Create_Function(wxT("ZAP_PS_PROJECT_INFO"),fun_handle_desc); wxLogMessage(_("rfc函数正在填充参数...")); // wxMessageBox(array_wbs.Item(0)+array_wbs.Item(1)); Thread_...
Thread.sleep((long)(Math.random()*100)); //随机分配时间,即运动员完成时间 System.out.println("Play"+id+" arrived."); }catch (InterruptedException e) { // TODO: handle exception e.printStackTrace...
Usage of minimum number of Win32 event handles, so the handle count of the application won't explode. The caller can wait for multiple or all the work items to complete. Work item can have a ...
HANDLE cus_Thread = CreateThread(NULL, 0, customer, NULL, 0, NULL); HANDLE getNum = CreateThread(NULL, 0, Getnum, NULL, 0, NULL); HANDLE pri_Thread1 = CreateThread(NULL, 0, pri_windows, NULL, 0, ...
线程JS ThreadJS 是一个简单的基于 Web Worker 的便利包装器。 它允许您在不创建单独的 javascript 文件的情况下启动 Web Worker。 您只需编写线程方法并(可选)传递自定义参数...//Optionally handle onmessage & o
HANDLE h_Thread[MAX_THREAD_NUM]; //用于存储每个线程句柄的数组; HANDLE empty_semaphore; //一个信号量; HANDLE h_mutex; //一个互斥量; HANDLE h_Semaphore[MAX_THREAD_NUM]; //生产者允许消费者开始消费的...
HANDLE h1,h2; h1 = CreateThread(NULL,0,func1,NULL,0,NULL); h2 = CreateThread(NULL,0,func2,NULL,0,NULL); Sleep(5000); CloseHandle(h1); CloseHandle(h2); cout; exit(0); return 0; } DWORD ...