子线程中使用handlerAndroid开发中handler如何使用

Android开发中handler如何使用
大家知道,Handler在Android中主要是负责发送和处理消息。它的主要用途大致是下面两个:1)按计划发送消息或执行某个Runnanble;2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程)学写一下,在UI线程中,系统已经有一个Activity来处理了,你可以再起若干个Handler来处理。在实例化Handler的时候,只要有Handler的指针,任何线程也都可以sendMessage。    Handler对于Message的处理是异步处理的。一个Looper只有处理完一条Message才会读取下一条,所以消息的处理是阻塞形式的(handleMessage()方法里不应该有耗时操作,可以将耗时操作放在其他线程执行,操作完后发送Message(通过sendMessges方法),然后由handleMessage()更新UI)。    根据对视频的学习写了一个通过Button控件启动进度条(类似于下载等操作)的程序,简单介绍一下,有两个Button控件,一个是开始,点击之后会显示一个进度条以每次十分之一的进度进行(一开始是隐藏的),另一个是停止,可以中断进度。java代码: 1packagezzl.handleactivity; 2 3importandroid.app.Activity; 4importandroid.os.Bundle; 5importandroid.os.Handler; 6importandroid.os.Message; 7importandroid.view.Gravity; 8importandroid.view.View; 9importandroid.view.View.OnClickListener;10importandroid.widget.Button;11importandroid.widget.ProgressBar;12importandroid.widget.Toast;1314publicclassHandler_01extendsActivity{15  16  //声明变量17  privateButtonstartButton=null;18  privateButtonendButton=null;19  privateProgressBarfirstBar=null;20  privateToasttoast=null;21  @Override22  protectedvoidonCreate(BundlesavedInstanceState){23    super.onCreate(savedInstanceState);24    setContentView(R.layout.main);25    26    //根据ID获取对象27    startButton=(Button)findViewById(R.id.startButton);28    endButton=(Button)findViewById(R.id.endButton);29    firstBar=(ProgressBar)findViewById(R.id.firstBar);30    //给对象设置动作监听器31    startButton.setOnClickListener(newStartButtonListener());32    endButton.setOnClickListener(newEndButtonListener());33  }3435  classStartButtonListenerimplementsOnClickListener{3637    @Override38    publicvoidonClick(Viewv){39      //TODOAuto-generatedmethodstub40      //一开始执行,加入到消息队列,不延迟,41      //然后马上执行run方法42      firstBar.setVisibility(View.VISIBLE);43      firstBar.setMax(100);44      handler.post(upRunnable);45      toast=Toast.makeText(Handler_01.this,\"运行开始\",Toast.LENGTH_SHORT);46      toast.setGravity(Gravity.CENTER,0,0);47      toast.show();48    }49  }50  classEndButtonListenerimplementsOnClickListener{5152    @Override53    publicvoidonClick(Viewv){54      //TODOAuto-generatedmethodstub55      //停止56      handler.removeCallbacks(upRunnable);57      System.out.println(\"It\'stimetostop...\");58    }59  }60  61  //创建handler对象,在调用post方法62  //异步消息处理:将下载或者处理大数据等等单独放到另一个线程63  //更好的用户体验64  Handlerhandler=newHandler(){65    66    @Override67    publicvoidhandleMessage(Messagemsg){68      firstBar.setProgress(msg.arg1);69      firstBar.setSecondaryProgress(msg.arg1+10);70      //handler.post(upRunnable);71      if(msg.arg1

本文来自投稿,不代表长河网立场,转载请注明出处: http://www.changhe99.com/a/Jb604YB6l7.html

(0)

相关推荐