Handler处理长时间事件
来源:互联网 发布:网络用语word哥 编辑:程序博客网 时间:2024/05/01 17:22
当我们在处理一些比较长时间的事件时候,比如读取网络或者数据库的数据时候,就要用到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的这个方法@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.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() {@Overridepublic 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(){@Overridepublic void run() {Log.i("tag", "run()-->"+Thread.currentThread().getName());//在新线程里执行长耗时方法longTimeMethod();//执行完毕后给handler发送一个空消息handler.sendEmptyMessage(0);}}.start();}//模拟下载文件的长耗时方法protected void longTimeMethod() {// TODO Auto-generated method stubtry {Log.i("tag", "longTimeMethod-->"+Thread.currentThread().getName());Thread.sleep(10000);} 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处理长时间事件
- Swing多线程处理长时间运行的事件
- Android 系列 6.15处理长时间点击事件
- Handler事件处理机制
- 事件处理012(Handler)
- Android:Handler事件处理机制
- Android 事件处理基于Handler 消息处理
- jquery 事件处理handler函数的参数
- android之事件处理/Handler/AsyncTask
- 长时间握手处理
- Android事件处理方法总结-Handler消息处理
- Android事件处理方法总结-Handler消息处理
- Android事件处理方法总结-Handler消息处理
- Android事件处理之四 Handler消息传递机制
- 初步 利用Handler+ArrayList来处理并发事件
- 事件处理机制之Handler消息传递机制浅析
- ORACLE 处理长时间锁表
- 页面长时间不操作处理
- 高效C++委托的原理
- OSGi
- Apache服务器启动时80端口被占用的若干情况及解决方法
- error: ‘class QApplication’ has no member named ‘setMainWidget’
- 算法系列15天速成——第三天 七大经典排序【下】
- Handler处理长时间事件
- 圣女果
- poj 1330(LCA)tarjam运用
- Android Fragment---执行Fragment事务
- Android蓝牙开发浅析
- 一个Socket连接管理器(心跳机制)
- Android Fragment---跟Activity通信
- Android Fragment---给Activity创建事件回调
- 项目注释心得