`

android的线程特点

 
阅读更多

         android的view和ui组件不是线程安全的,所以android不允许开发者启动线程访问用户界面中的ui组件,这是就额外定义一个handler来处理对ui组件的操作。。。

 

Handler 为Android操作系统中的线程通信工具,包为android.os.Handler。

与Handler绑定的有两个队列,一个为消息队列,另一个为线程队列。Handler可以通过这两个队列来分别:

  1. 发送、接受、处理消息–消息队列;
  2. 启动、结束、休眠线程–线程队列;

Android OS中,一个进程被创建之后,主线程(可理解为当前Activity)创建一个消息队列,这个消息队列维护所有顶层应用对象(Activities, Broadcast receivers等)以及主线程创建的窗口。你可以在主线程中创建新的线程,这些新的线程都通过Handler与主线程进行通信。通信通过新线程调用 Handler的post()方法和sendMessage()方法实现,分别对应功能:

  1. post()  将一个线程加入线程队列;
  2. sendMessage() 发送一个消息对象到消息队列;

当然,post()方法还有一些变体,比如postDelayed()、postAtTime()分别用来延迟发送、定时发送;

消息的处理,在主线程的Handler对象中进行;具体处理过程,需要在new Handler对象时使用匿名内部类重写Handler的handleMessage(Message msg)方法;

线程加入线程队列可以在主线程中也可以在子线程中进行,但都要通过主线程的Handler对象调用post()。

 

 

 

  • public class HandlerActivity extends Activity {  
  •       
  •     Button btnStart,btnEnd;  
  •     ProgressBar proBar;  
  •       
  •     /** Called when the activity is first created. */  
  •     @Override  
  •     public void onCreate(Bundle savedInstanceState) {  
  •         super.onCreate(savedInstanceState);  
  •         setContentView(R.layout.main);  
  •           
  •         //通过控件的ID来实例化控件对象  
  •          btnStart = (Button)findViewById(R.id.start);  
  •         btnEnd = (Button)findViewById(R.id.end);  
  •         proBar = (ProgressBar)findViewById(R.id.pBar);  
  •           
  •         //开始按钮触发事件  
  •         btnStart.setOnClickListener(new View.OnClickListener() {  
  •               
  •             @Override  
  •             public void onClick(View v) {  
  •                 proBar.setVisibility(View.VISIBLE);  
  •                 updateBarHandler.post(updateBarThread);  
  •             }  
  •         });  
  •           
  •         //结束按钮触发事件  
  •         btnEnd.setOnClickListener(new View.OnClickListener() {  
  •               
  •             @Override  
  •             public void onClick(View v) {  
  •                 updateBarHandler.removeCallbacks(updateBarThread);  
  •             }  
  •         });  
  •     }  
  •       
  •       
  •      //创建一个Handler对象  
  •      Handler updateBarHandler = new Handler(){  
  •   
  •         @Override  
  •         public void handleMessage(Message msg) {  
  •             proBar.setProgress(msg.arg1);  
  •             updateBarHandler.post(updateBarThread);  
  •         }  
  •           
  •     };  
  •       
  •     //更新ProgressBar的线程对象  
  •     Runnable updateBarThread = new Runnable() {  
  •         int i = 0;  
  •         @Override  
  •         public void run() {  
  •             ii = i + 10;  
  •             Message msg = updateBarHandler.obtainMessage();  
  •             msg.arg1 = i;  
  •             try{  
  •                 Thread.sleep(2000);  
  •             }catch (InterruptedException e) {  
  •                 e.printStackTrace();  
  •             }  
  •             updateBarHandler.sendMessage(msg);  
  •             if(i == 100){  
  •                 updateBarHandler.removeCallbacks(updateBarThread);  
  •             }  
  •         }  
  •     };  
  • }  
  •  

    在主线程HandlerActivity中,通过Handler对象将updateBarThread子线程对象添加到主线程的队列中,并不是另外开启了一个新的线程去执行。

    分享到:
    评论

    相关推荐

      如何正确使用Android线程详解

      多线程编程之所以复杂原因之一在于其并行的特性,人脑的工作方式更符合单线程串行的特点。一个接着一个的处理任务是大脑最舒服的状态,频繁的在任务之间切换会产生“头痛”这类系统异常。人脑的多任务和计算机的多...

      android开发秘籍

      1.5 android 的特点 8 1.5.1 多进程和应用程序微件 8 1.5.2 触摸、手势和多点触控 8 1.5.3 硬键盘和软键盘 8 1.6 android 开发 8 1.6.1 如何使用本书中的秘诀 8 .1.6.2 好好设计应用程序 9 1.6.3 保持向前...

      Android代码-一个轻量级的AOP(Android)应用框架

      特点 支持快速点击切片@SingleClick,支持设置快速点击的时间间隔。 支持动态申请权限切片@Permission,支持自定义响应动作。 支持主线程切片@MainThread。 支持IO线程切片@IOThread,支持多种线程池类型。 ...

      Android 功能完善的数独游戏源代码.rar

      Android 功能完善的数独游戏源代码,关于这个游戏的玩法,这里不再赘述了,游戏编写上的特点,简要说明下:  这个游戏在界面上可支持更换三种游戏主题(草地绿、天空蓝、深沉黑)。同时游戏中还涉及到了许多的...

      android开发指南中文版

      介绍了android的相关组件和特点,涉及到了intent,activity,任务,线程,生命周期,界面组件, 适配器,资源,数据存储,网络等等。

      Android也架构之三:简单工厂模式优化网络请求

      很悲催,我们在《Android也架构之二:单例模式访问网络》 用httpConnect的方式去访问网络,...3、学会在子线程如何更新主线程的android基础知识 详情网址: http://blog.csdn.net/michael_yy/article/details/7893015

      Android版‘音乐一点通’音乐播放器源代码

      特点描述: 支持1.5版本以上Android系统 支持添加桌面小组件,播放/暂停/切歌更方便 支持多线程下载,随时下载/暂停/取消 支持皮肤背景更换,随心换喜好的皮肤背景 支持正常模式/夜间模式切换,支持定时关闭 歌曲...

      深入理解Android:卷I--详细书签版

       笔者认为,本书最大的特点在于,较全面、系统、深入地讲解了Android系统中的几大重要组成部分的工作原理,旨在通过直接剖析源代码的方式,引领读者一步步深入于诸如Binder、 Zygote、Audio、Surface、Vold、Rild...

      Android开发框架Afinal

       Afinal是一个开源的android的orm和ioc应用开发框架,其特点是小巧灵活,代码入侵量少。在android应用开发中,通过Afinal的ioc框架,诸如ui绑定,事件绑定,通过注解可以自动绑定。通过Afinal的orm框架,无需任何...

      基于Android4.4和百度地图的远程定位系统设计

      首先利用注册机制,构建一个由5个线程和3个消息队列组成的支持多用户同时使用的服务器系统,然后针对Android4.4版本特点,阐述了如何使用Looper机制进行消息线程间传递,最后通过百度地图API和定位终端的位置信息,...

      Android小游戏点泡泡

      利用线程的特点,改变坐标,重画图像,形成动画

      Android代码-强大的 Android 下载上传组件

      Aria有以下特点: 简单、方便 可以在Activity、Service、Fragment、Dialog、popupWindow、Notification等组件中使用 支持HTTPFTP断点续传、多任务自动调度 支持HTTP任务组FTP文件夹,断点续传下载 支持HTTP表单上传...

      Android项目面试题.rar

      1. 内容丰富:本面试题集包含了大量关于Android项目的问题,涵盖了UI设计、数据存储、网络编程、多线程处理等多个方面,既有基础知识也有实战技巧。 2. 结构清晰:所有问题按照不同的知识点进行分类整理,方便求职者...

      Android中IntentService的特征

      service中1需要手动开启子线程2服务开启之后会一直运行,需要手动调用stopService();或者stopSelf(); intentService是一种异步(子线程)、自动停止的服务,这个例子测试IntentService的特征

      Android代码-MEngine

      先给个简单总结,多引擎加快页面渲染的技术特点(所谓多引擎指多线程与多WebView) UI与业务线程分离 多WebView且同时加载 ps:目前仅支持Android 1 Hello World 上手只用三分钟 Step 1 创建文件夹,名称自定义...

      Android 面试宝典

      5. Android中的动画有哪几类,它们的特点和区别是什么? 两种.一种是Tween动画.还有一种是Frame动画. Tween动画,这种实现方式可以使视图组件移动.放大.缩小以及产生透明度的变化; 另一种Frame动画,传统的动画方法,...

      java和android 通用的rsa 加密封装 在android中采用java的填充算法.zip

      java和android 通用的rsa 加密封装 在android中采用java的填充算法 可以和ios .net跨平台使用 Java是一种高性能、跨平台的面向对象编程语言。它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人...

      Android知识点及重要代码合集 word文档

      7.4 AsyncTask 特点、参数及需要实现的方法 64 7.5 异步任务代码 64 7.6 下载进度对话框相关实现代码 67 7.7使用runONUiThread()\HttpURLConnection完成文件下载操作 68 7.8 掌握AsyncTask异步任务下载网络资源 70...

      AES-Java-iOS-Android.zip

      AES-Java-iOS-Android,兼容Java,iOS,Android三端的AES-128-ECB加密算法,附三端Demo Java是一种高性能、跨平台的面向对象编程语言。它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年...

      matomo-sdk-android:适用于Android的SDK可通过Matomo评估您的应用。 适用于Android手机,平板电脑,Fire TV电视棒等!

      特点: 缓存和离线支持优雅的重新连接处理仅限WIFI模式对多个跟踪器的线程安全支持支持自定义连接实现完整的支持基于校验和的应用安装/升级跟踪快速开始对于起步不太快的内容,或查看我们的在您的服务器上 。...

    Global site tag (gtag.js) - Google Analytics