- 浏览: 62384 次
- 性别:
- 来自: 沈阳
文章分类
最新评论
android:Handler整理总结 收藏
首先声明,以下是我转载整理的。
感谢
http://blog.csdn.net/Android_Tutor/archive/2010/05/08/5568806.aspx
http://www.pocketdigi.com/20100814/45.html
这些朋友的共享!
当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无响应,如果时间过长,程序还会挂掉。Handler就是把这些功能放到一个单独的线程里执行,与Activity互不影响。
我们简单用例子来说明:
小实例一:5秒钟更新一下Title(标题),如图:
代码如下:
view plaincopy to clipboardprint?
package com.android.tutor;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
public class HandlerDemo extends Activity {
// title为setTitle方法提供变量,这里为了方便我设置成了int型
private int title = 0;
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
updateTitle();
break;
}
};
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTask(), 1, 5000);
}
private class MyTask extends TimerTask {
@Override
public void run() {
Message message = new Message();
message.what = 1;
mHandler.sendMessage(message);
}
}
public void updateTitle() {
setTitle("Welcome to Mr Wei's blog " + title);
title++;
}
}
package com.android.tutor;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
public class HandlerDemo extends Activity {
// title为setTitle方法提供变量,这里为了方便我设置成了int型
private int title = 0;
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
updateTitle();
break;
}
};
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTask(), 1, 5000);
}
private class MyTask extends TimerTask {
@Override
public void run() {
Message message = new Message();
message.what = 1;
mHandler.sendMessage(message);
}
}
public void updateTitle() {
setTitle("Welcome to Mr Wei's blog " + title);
title++;
}
}
小实例二:用Handler更新进度条ProgressBar ;如图:当按开始按钮时,进度条会每隔500毫秒加1,直到加到100或者按停止时停止
代码:
view plaincopy to clipboardprint?
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
public class main extends Activity {
/** Called when the activity is first created. */
ProgressBar pb1;
Handler handle = new Handler();
// 新建一个Handler对象
Button b1;
Button b2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
pb1 = (ProgressBar) findViewById(R.id.pb1);
pb1.setProgress(0);
b1 = (Button) findViewById(R.id.b1);
b1.setOnClickListener(b1Lis);
b2 = (Button) findViewById(R.id.b2);
b2.setOnClickListener(b2Lis);
}
private OnClickListener b1Lis = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handle.post(add);
// 开始执行add
}
};
private OnClickListener b2Lis = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handle.removeCallbacks(add);
// 停止执行
pb1.setProgress(0);
}
};
int pro = 0;
Runnable add = new Runnable() {
// 定义add
@Override
public void run() {
// TODO Auto-generated method stub
pro = pb1.getProgress() + 1;
pb1.setProgress(pro);
setTitle(String.valueOf(pro));
if (pro < 100) {
handle.postDelayed(add, 500);
// 如果进度小于100,,则延迟500毫秒后重复执行add
}
}
};
}
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
public class main extends Activity {
/** Called when the activity is first created. */
ProgressBar pb1;
Handler handle = new Handler();
// 新建一个Handler对象
Button b1;
Button b2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
pb1 = (ProgressBar) findViewById(R.id.pb1);
pb1.setProgress(0);
b1 = (Button) findViewById(R.id.b1);
b1.setOnClickListener(b1Lis);
b2 = (Button) findViewById(R.id.b2);
b2.setOnClickListener(b2Lis);
}
private OnClickListener b1Lis = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handle.post(add);
// 开始执行add
}
};
private OnClickListener b2Lis = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handle.removeCallbacks(add);
// 停止执行
pb1.setProgress(0);
}
};
int pro = 0;
Runnable add = new Runnable() {
// 定义add
@Override
public void run() {
// TODO Auto-generated method stub
pro = pb1.getProgress() + 1;
pb1.setProgress(pro);
setTitle(String.valueOf(pro));
if (pro < 100) {
handle.postDelayed(add, 500);
// 如果进度小于100,,则延迟500毫秒后重复执行add
}
}
};
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wufenglong/archive/2010/08/27/5843513.aspx
首先声明,以下是我转载整理的。
感谢
http://blog.csdn.net/Android_Tutor/archive/2010/05/08/5568806.aspx
http://www.pocketdigi.com/20100814/45.html
这些朋友的共享!
当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无响应,如果时间过长,程序还会挂掉。Handler就是把这些功能放到一个单独的线程里执行,与Activity互不影响。
我们简单用例子来说明:
小实例一:5秒钟更新一下Title(标题),如图:
代码如下:
view plaincopy to clipboardprint?
package com.android.tutor;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
public class HandlerDemo extends Activity {
// title为setTitle方法提供变量,这里为了方便我设置成了int型
private int title = 0;
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
updateTitle();
break;
}
};
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTask(), 1, 5000);
}
private class MyTask extends TimerTask {
@Override
public void run() {
Message message = new Message();
message.what = 1;
mHandler.sendMessage(message);
}
}
public void updateTitle() {
setTitle("Welcome to Mr Wei's blog " + title);
title++;
}
}
package com.android.tutor;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
public class HandlerDemo extends Activity {
// title为setTitle方法提供变量,这里为了方便我设置成了int型
private int title = 0;
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
updateTitle();
break;
}
};
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTask(), 1, 5000);
}
private class MyTask extends TimerTask {
@Override
public void run() {
Message message = new Message();
message.what = 1;
mHandler.sendMessage(message);
}
}
public void updateTitle() {
setTitle("Welcome to Mr Wei's blog " + title);
title++;
}
}
小实例二:用Handler更新进度条ProgressBar ;如图:当按开始按钮时,进度条会每隔500毫秒加1,直到加到100或者按停止时停止
代码:
view plaincopy to clipboardprint?
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
public class main extends Activity {
/** Called when the activity is first created. */
ProgressBar pb1;
Handler handle = new Handler();
// 新建一个Handler对象
Button b1;
Button b2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
pb1 = (ProgressBar) findViewById(R.id.pb1);
pb1.setProgress(0);
b1 = (Button) findViewById(R.id.b1);
b1.setOnClickListener(b1Lis);
b2 = (Button) findViewById(R.id.b2);
b2.setOnClickListener(b2Lis);
}
private OnClickListener b1Lis = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handle.post(add);
// 开始执行add
}
};
private OnClickListener b2Lis = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handle.removeCallbacks(add);
// 停止执行
pb1.setProgress(0);
}
};
int pro = 0;
Runnable add = new Runnable() {
// 定义add
@Override
public void run() {
// TODO Auto-generated method stub
pro = pb1.getProgress() + 1;
pb1.setProgress(pro);
setTitle(String.valueOf(pro));
if (pro < 100) {
handle.postDelayed(add, 500);
// 如果进度小于100,,则延迟500毫秒后重复执行add
}
}
};
}
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
public class main extends Activity {
/** Called when the activity is first created. */
ProgressBar pb1;
Handler handle = new Handler();
// 新建一个Handler对象
Button b1;
Button b2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
pb1 = (ProgressBar) findViewById(R.id.pb1);
pb1.setProgress(0);
b1 = (Button) findViewById(R.id.b1);
b1.setOnClickListener(b1Lis);
b2 = (Button) findViewById(R.id.b2);
b2.setOnClickListener(b2Lis);
}
private OnClickListener b1Lis = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handle.post(add);
// 开始执行add
}
};
private OnClickListener b2Lis = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handle.removeCallbacks(add);
// 停止执行
pb1.setProgress(0);
}
};
int pro = 0;
Runnable add = new Runnable() {
// 定义add
@Override
public void run() {
// TODO Auto-generated method stub
pro = pb1.getProgress() + 1;
pb1.setProgress(pro);
setTitle(String.valueOf(pro));
if (pro < 100) {
handle.postDelayed(add, 500);
// 如果进度小于100,,则延迟500毫秒后重复执行add
}
}
};
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wufenglong/archive/2010/08/27/5843513.aspx
发表评论
-
android 备用
2014-08-03 13:26 412http://blog.csdn.net/rain_butte ... -
Android中px与dip,sp与dip等的转换工具类(转)
2014-07-16 20:07 567http://www.cnblogs.com/wader201 ... -
android 字体总结
2014-07-15 21:53 517Android提供三种字体:“Sans”,“serif“和“m ... -
mina
2014-07-03 14:12 471http://chwshuang.iteye.com/blog ... -
android获取IMEI
2014-06-17 08:34 497核心代码: Imei = ((TelephonyMan ... -
andorid ui
2014-06-04 22:39 0http://blog.csdn.net/ddddpow/ar ... -
android alarmManage
2014-05-28 21:47 661转自:http://jinguo.iteye.com/bl ... -
adaf
2014-05-27 22:32 0http://www.eoeandroid.com/thr ... -
weixin
2014-05-13 22:42 0android weisixn -
jpajpa
2014-01-28 15:06 478http://www.iteye.com/problems/9 ... -
吉安帕
2014-01-23 22:30 0dfsgdaffgadrgad -
CrudRepository
2013-11-28 19:58 0PagingAndSortingRepository Cr ... -
Android 的第三方报表组件,AChartEngine 案列
2013-08-19 16:48 0http://www.kuaipan.cn/file/id_3 ... -
android sdk adress
2013-08-12 13:23 442developer.android.com/sdk/index ... -
android 结束进程
2013-07-29 22:01 697Android获取apk的版本及包名等信息 http://bl ... -
adnroid 4.0.3去掉虚拟导航栏
2013-07-27 20:54 1005http://blog.csdn.net/wfh1988/ar ... -
andorid全屏
2013-07-27 10:15 764super.onCreate(savedIns ... -
Foursquare
2012-10-12 17:22 0Foursquare -
sqllite brower
2012-09-11 23:05 633http://www.oschina.net/p/sqlite ... -
notice
2012-09-03 21:13 665http://tibaloga.iteye.com/blog/ ...
相关推荐
android_Handler整理总结.doc
import android.os.Handler; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { ...
Android源代码:HandlerDemo。。。。。。。。。。。。
Android中Handler的学习实例,在本示例中,在主线程外开启子线程(使用匿名内部类Runnable),使用Handler中的Message传递消息(高效),操作一个ProgressBar的进度。适合初学者学习和了解Handler以及ProgressBar的...
HandlerThread handlerThread = new HandlerThread("handler_thread"); //在使用HandlerThread的getLooper()方法之前,必须先调用该类的start()方法,否则获得的值为空值; handlerThread.start(); //创建...
Android的Handler使用方法总结,不错的文档,跟大家分享分享
嵌入式Android项目设计与开发 第七章 多线程 ——(3)UI线程冲突 多线程 即使Android可以使用线程, 但规定不能使用子线程修改主线程的内容。 多线程 可以考虑在子线程中使用runOnUiThread重新载入UI线程,并干预...
以前刚接触的Handler的时候,感觉总是很困惑,对Handler原理也是一知半解,现在对Handler知识点总结一下,写了一个Demo,供参考。http://blog.csdn.net/yalinfendou博客中有详细介绍……
android 中Handler 的几种写法,很简单的demo,大神简单修改下,用的是Handler.Callback,的方法
android:handler简单用法
异步请求分页示例:handler.ashx + $.ajax() + Json + 前端分页处理
1.handler是什么? 2.handler怎么用? 3.为什么要用handler?
对于Android应用开发工程师而言,本书中关于Binder,以及sp、wp、Handler和Looper等常用类的分析或许能帮助你迅速适应Android平台上的开发工作。 (2)Android系统开发工程师 Android系统开发工程师常常需要...
这是Pro Android学习系列中Android Service部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512
Android中handler的使用,处理多线程的使用
android Handler的使用,我也刚开始学习,从别处下载了给大家分享
Android Handler类详解 Android Handler类详解 Android Handler类详解 Android Handler类详解
android handler的一些测试,套用他人的代码做的一些测试,多个线程sendmessage,该由那个handler处理?
Android 是消息驱动的,实现消息驱动有几个要素: 消息的表示: Message 消息队列: MessageQueue 消息循环,用于循环取出消息进行处理: Looper 消息处理,消息循环从消息队列中取出消息后要对消 息进行处理: ...