当我们在处理一些比较长时间的事件时候,比如读取网络或者数据库的数据时候,就要用到Handler,有时候为了不影响用户操作应用的流畅还要开多一个线程来区别UI线程,在新的线程里面处理长时间的操作。开发的时候遇到数据处理都可以这样用handler,灵活修改一下就可以做各种效果了。

第一步:ProgressDialog弹出旋转框来提示长时间操作。

第二步:开多一个线程处理长时间操作,这里让线程睡觉10秒。

第三部:长时间操作结束后给handler发送一个消息,可以是一个整数,如果这个Activity有多个handler,可以定义多个整数成员变量来区别不同的消息。

第四步:在定义Handler的handlerMessage方法里面把ProgressDialog对象dismiss()掉,把弹出框消灭表示操作完成。

代码如下:

public class Android_HandlerActivity extends Activity {
/** Called when the activity is first created. */
//声明变量
private Button b1;
private ProgressDialog pd;
//定义handler对象
private Handler handler = new Handler(){
//当有消息发送出来的时候就执行Handler的这个方法
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
//只要执行到这里就关闭对话框
pd.dismiss();
} };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); //Resources res = this.getResources(); //查看UI组件所在的线程名
Log.i("tag", "onCreate()-->"+Thread.currentThread().getName()); //定义UI组件
b1= (Button)findViewById(R.id.Button01); //给按钮绑定单击事件监听器
b1.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
//点击按钮后去处理长耗时操作
processThread();
}
});
}
protected void processThread() {
// TODO Auto-generated method stub
//构建一个下载进度条
pd= ProgressDialog.show(Android_HandlerActivity.this, "下载文件", "正在下载……");
Log.i("tag", "processThread()-->"+Thread.currentThread().getName());
new Thread(){ @Override
public void run() {
Log.i("tag", "run()-->"+Thread.currentThread().getName()); //在新线程里执行长耗时方法
longTimeMethod(); //执行完毕后给handler发送一个空消息
handler.sendEmptyMessage();
} }.start();
}
//模拟下载文件的长耗时方法
protected void longTimeMethod() {
// TODO Auto-generated method stub
try { Log.i("tag", "longTimeMethod-->"+Thread.currentThread().getName()); Thread.sleep(); } catch (InterruptedException e) { e.printStackTrace(); }
}
}

main.xml只是一个简单的Button:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <Button
android:id="@+id/Button01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" /> </LinearLayout>

最后运行图片如下:

Handler处理长时间事件的更多相关文章

  1. 给listview添加长时间点击事件(完成删除操作)

    出现的问题是:当长时间点击listview的时候,触发长时间点击事件的同时也会触发点击事件,处理的办法是在长时间点击事件中加上return true:这样就可以很好的解决了. 给listview天机长 ...

  2. Android系统中自定义按键的短按、双击、长按事件

    在项目中碰到这样的问题: 由于系统中的按键在底层做了重新定义或者新增了按键,此时需要在APP层对按键事件(keyevent)做分解处理,模拟Android系统做法,把keyevent分解成: 1.单击 ...

  3. 如何查看Windows服务器运行了多长时间

    前言:有时候管理.维护Windows服务器需要定期重启服务器(为什么需要重启,你懂的),但是这个"定期"有时候会受很多因素影响,例如某台服务器忘了重启:某台服务器那个时间段业务繁忙 ...

  4. 长按事件jquery mobile

    chat_enlarge.addEventListener('touchend', function(event) { if(fingers == 1){ event.preventDefault() ...

  5. Springmvc+Hibernate在Eclipse启动Tomcat需要很长时间的解决方法

    最近在学习SpringMvc开发,有一个提问困扰了很久,就是在Eclipse启动Tomcat需要很长时间,大概要1分多钟. 启动日志: 九月 08, 2016 8:59:01 下午 org.apach ...

  6. webview长按事件js监听

    做app开发时,用到了webview,需要监听webview的长按事件,使用原生的js处理监听如下: ; //定时器 //开始按 function gtouchstart() { timeOutEve ...

  7. 为 UIButton 添加长按事件

    UIButton *aBtn=[UIButtonbuttonWithType:UIButtonTypeCustom]; [aBtn setFrame:CGRectMake(40, 100, 60, 6 ...

  8. WPF窗口长时间无人操作鼠标自动隐藏

    在软件开发中有时会有等待一段时间无人操作后隐藏鼠标,可能原因大致如下: 1.为了安全性,特别是那些需要用到用户名和密码登录服务端的程序,常常考虑长期无人操作,程序自动跳转到用户登录界面: 2.软件为了 ...

  9. Android自定义长按事件

    Android系统自带了长按事件,setOnLongClickListener即可监听.但是有时候,你不希望用系统的长按事件,比如当希望长按的时间更长一点的时候.这时候就需要自己来定义这个长按事件了. ...

随机推荐

  1. SPOJ--K-query (线段树离线) 离线操作解决一些问题

    K-query Given a sequence of n numbers a1, a2, ..., an and a number of k- queries. A k-query is a tri ...

  2. [LeetCode] 200. Number of Islands 解题思路

    Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...

  3. [饭后算法系列] "头尾移动" 排序列表

    1. 问题 一个乱序列表(list), 只支持两种操作: 把一个元素移动到头部, 或者把一个元素移动到尾部. 需要设计一种算法, 使得移动次数最少而使列表有序 举两个例子: 1. {3,5,7,1,9 ...

  4. Wish | IT桔子

    Wish | IT桔子 Wish www.wish.com   认领 关注 分享

  5. 学习DNS路上之CloudXNS

    使用CloudXNS已经有两年了,趁着他们现在做活动的机会也发表一下这两年来使用感受与CloudXNS的变化,也对我学习使用的一次总结. 简介 CloudXNS是北京快网开发的一套授权DNS系统, 用 ...

  6. Laravel5.2 下使用Form

    laravel到了5.1.*以上版本,便没有了illuminate/html类库的支持, 我试着把illuminate/html类库加入了laravel5.2,依然没有用, 但是laravelcoll ...

  7. prepareStatement的用法和解释

    1. PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程2. 使用 Statement 对象.在对数据库只执行一次性存取的时侯,用 Statement ...

  8. iOS个别界面旋转问题

    /*是否应该自动旋转屏幕**/ - (BOOL)shouldAutorotate{ return YES; } /*是否支持屏幕旋转并指明旋转方向**/ - (UIInterfaceOrientati ...

  9. Android两种 旋转Bitmap方法

    方法1. 利用Bitmap.createBitmap Bitmap adjustPhotoRotation(Bitmap bm, final int orientationDegree) {      ...

  10. Eclipse 4.2 + Tomcat 7.x + JDK 7 搭建Java Web开发环境

    1. 准备工具 Eclipse 4.2 (到官网下载:http://www.eclipse.org/downloads/  要下载Eclipse IDE for Java EE Developers ...