一、Android有两种方式处理线程:

比较耗时的操作放在后台服务,通过通知机制通知用户使用的活动(activity);在后台线程中处理耗时的操作

二、使用Handler

创建后台线程最友好的办法是创建一个Handler子类的实例。只需一个Handler对应一个Activity。自定义的后台线程可与 Handler通信,Handler将与UI线程一起工作。和Handler通信,需要两个选项,message和runnable对象。

三、Message

发送Message到Handler,第一步调用obtainMessage(),从池中得到Message对象。

然后,可通过消息队列将Message发送给Handler,通过sendMessage…()方法族:

sendMessage() 立即发送Message到消息队列

sendMessageAtFrontOfQueue() 立即发送Message到队列,而且是放在队列的最前面

sendMessageAtTime() 设置时间,发送Message到队列

sendMessageDelayed() 在延时若干毫秒后,发送Message到队列

为了处理Message,Handler需要实现handleMessage(),当Message出现在队列中时,会调用handleMessage()方法。另外,Handler可在需要时更新UI。

以下示例演示一个进度条,每隔1秒钟增加1/20个单位。效果图:

java代码:

        
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent">
  6. <ProgressBar
  7. android:id="@+id/progress"
  8. style="?android:attr/progressBarStyleHorizontal"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"/>
  11. </LinearLayout>

java代码:

        
  1. packageeoe.demo;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.os.Handler;
  5. importandroid.os.Message;
  6. importandroid.widget.ProgressBar;
  7. publicclassShowThreadextendsActivity{
  8. ProgressBarbar;
  9. Handlerhandler=newHandler(){
  10. @Override
  11. publicvoidhandleMessage(Messagemsg){
  12. bar.incrementProgressBy(5);
  13. }
  14. };
  15. booleanisRunning=false;
  16. /**Calledwhentheactivityisfirstcreated.*/
  17. @Override
  18. publicvoidonCreate(BundlesavedInstanceState){
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.main);
  21. bar=(ProgressBar)findViewById(R.id.progress);
  22. }
  23. @Override
  24. protectedvoidonStart(){
  25. super.onStart();
  26. bar.setProgress(0);
  27. Threadbackground=newThread(newRunnable(){
  28. @Override
  29. publicvoidrun(){
  30. for(inti=0;i<20&&isRunning;i++){
  31. try{
  32. Thread.sleep(1000);
  33. }catch(InterruptedExceptione){
  34. }
  35. handler.sendMessage(handler.obtainMessage());
  36. }
  37. }
  38. });
  39. isRunning=true;
  40. background.start();
  41. }
  42. @Override
  43. protectedvoidonStop(){
  44. super.onStop();
  45. isRunning=false;
  46. }
  47. }

小结:

当第一次启动一个android程序是,android会自动创建一个称为“main”主线程的线程。这个线程很重要,因为它负责吧时间分派到相应对控件,其中就包括屏幕绘图时间,它同样是用户与android控件交互的线程。

更多相关文章

  1. 如何在后台运行Linux命令?
  2. 安卓ListView 数据分批加载
  3. httpClient及android 原生接口实现下载并显示图片
  4. Android(安卓)AsyncTask使用以及源码解析
  5. Android面试题目收集
  6. PHP新手入门1——表单
  7. Android(安卓)activity与service中的子线程 (入门级)
  8. Android(安卓)消息机制——你真的了解Handler?
  9. AsyncTask的使用及源码分析

随机推荐

  1. android之获取信息终端
  2. android远程更新客户端
  3. android 广播传参数
  4. Android中getWidth()和getMeasureWidth()
  5. android如何让webview里的资源访问本地缓
  6. android中设置一些没有maxHeight属性控件
  7. Android按钮的五种点击监听事件处理
  8. anroid 7.1添加自定义api服务
  9. Android apk下载 安装 卸载 打开
  10. Android圆角自定义View