说明:android螺纹。

android无非就是一个线程Main Thread和Worker Thread。(除了主线程Main Thread是Worker Thread)

Main Thread 也叫UI Thread 。绝大部分的UI 代码都执行在主线程的。

Worker Thread 通常完毕耗时较长、会产生堵塞的操作,比如訪问网络、进行大量IO的读写。

接下来用几个样例来说明一下。

样例:

1、用户点击Button,开启新的Worker Thread,在Worker Thread里面改动UI(改动TextView的属性)。

  1. package com.example.b_05_thread01;
  2.  
  3. import android.os.Bundle;
  4. import android.app.Activity;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.Button;
  8. import android.widget.TextView;
  9.  
  10. public class MainActivity extends Activity {
  11.  
  12. private TextView textView;
  13. private Button button;
  14.  
  15. @Override
  16. protected void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.activity_main);
  19.  
  20. textView = (TextView) findViewById(R.id.textViewId);
  21. button = (Button) findViewById(R.id.buttonId);
  22.  
  23. button.setOnClickListener(new ButtonListener());
  24. }
  25.  
  26. class ButtonListener implements OnClickListener {
  27.  
  28. @Override
  29. public void onClick(View v) {
  30. Thread t = new MyThread();
  31. t.start();
  32. }
  33. }
  34.  
  35. // Worker Thread
  36. class MyThread extends Thread {
  37. @Override
  38. public void run() {
  39. for (int i = 0; i <= 100; i++) {
  40. try {
  41. Thread.sleep(1 * 1000);
  42. } catch (InterruptedException e) {
  43. e.printStackTrace();
  44. }
  45. textView.setText("来自于线程的改动"); // 程序会报错,由于仅仅能在主线程中改动ui。
  46.  
  47. }
  48. }
  49. }
  50. }

执行结果:程序会报错,由于在主线程之外,原则上是不能改动ui的属性。

(也有例外,比如ProgressBar)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWN3b2w=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

2、用户点击Button,开启新的Worker Thread。在Worker Thread里面改动UI(改动ProgressBar的属性)。

  1. package com.example.b_05_thread01;
  2.  
  3. import android.os.Bundle;
  4. import android.app.Activity;
  5. import android.view.Menu;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.widget.Button;
  9. import android.widget.ProgressBar;
  10. import android.widget.TextView;
  11.  
  12. public class MainActivity extends Activity {
  13.  
  14. private TextView textView;
  15. private Button button;
  16. private ProgressBar proBar;
  17.  
  18. @Override
  19. protected void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.activity_main);
  22.  
  23. textView = (TextView) findViewById(R.id.textViewId);
  24. button = (Button) findViewById(R.id.buttonId);
  25. proBar = (ProgressBar) findViewById(R.id.proBarId);
  26. button.setOnClickListener(new ButtonListener());
  27. }
  28.  
  29. class ButtonListener implements OnClickListener {
  30. @Override
  31. public void onClick(View v) {
  32. Thread t = new MyThread();
  33. t.start();
  34. }
  35. }
  36.  
  37. // Worker Thread
  38. class MyThread extends Thread {
  39. @Override
  40. public void run() {
  41. for (int i = 0; i <= 100; i++) {
  42. try {
  43. Thread.sleep(100);
  44. } catch (InterruptedException e) {
  45. e.printStackTrace();
  46. }
  47. proBar.setProgress(proBar.getProgress() + 1);
  48. }
  49. }
  50. }
  51. }

执行结果:成功。

3、既然在Worker Thread里面不能改动UI,那么就不须要Worker Thread。全部的事情在Main Thread里面操作,行不行呢?  答案是不行的!

当用户点击Button,不开启新的线程,直接在Main Thread里面休眠。

  1. package com.example.b_05_thread01;
  2.  
  3. import android.os.Bundle;
  4. import android.app.Activity;
  5. import android.view.Menu;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.widget.Button;
  9. import android.widget.ProgressBar;
  10. import android.widget.TextView;
  11.  
  12. public class MainActivity extends Activity {
  13.  
  14. private TextView textView;
  15. private Button button;
  16. private ProgressBar proBar;
  17.  
  18. @Override
  19. protected void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.activity_main);
  22.  
  23. textView = (TextView) findViewById(R.id.textViewId);
  24. button = (Button) findViewById(R.id.buttonId);
  25. proBar = (ProgressBar) findViewById(R.id.proBarId);
  26. button.setOnClickListener(new ButtonListener());
  27. }
  28.  
  29. // 在一个应用程序其中,主线程通经常使用于接收用户的输入,以及将运算的结果反馈给用户
  30. // 所以说,对于一些堵塞的操作,必须放置在Worker Thread其中
  31. class ButtonListener implements OnClickListener {
  32.  
  33. @Override
  34. public void onClick(View v) {
  35. try {
  36. Thread.sleep(5 * 1000);
  37. } catch (InterruptedException e) {
  38. e.printStackTrace();
  39. }
  40. // Thread t = new MyThread();
  41. // t.start();
  42. }
  43. }
  44.  
  45. // // Worker Thread
  46. // class MyThread extends Thread {
  47. // @Override
  48. // public void run() {
  49. // for (int i = 0; i <= 100; i++) {
  50. // try {
  51. // Thread.sleep(100);
  52. // } catch (InterruptedException e) {
  53. // e.printStackTrace();
  54. // }
  55. // proBar.setProgress(proBar.getProgress() + 1);
  56. // }
  57. // }
  58. // }
  59. }

执行结果:如图。



在一个应用程序其中。主线程通经常使用于接收用户的输入,以及将运算的结果反馈给用户,所以说,对于一些堵塞的操作。必须放置在Worker Thread其中。



欢迎交流 http://blog.csdn.net/ycwol/article/details/39900371

版权声明:本文博客原创文章,博客,未经同意,不得转载。

android_线的更多相关文章

  1. 关于解决python线上问题的几种有效技术

    工作后好久没上博客园了,虽然不是很忙,但也没学生时代闲了.今天上博客园,发现好多的文章都是年终总结,想想是不是自己也应该总结下,不过现在还没想好,等想好了再写吧.今天写写自己在工作后用到的技术干货,争 ...

  2. 一起来玩echarts系列(一)------箱线图的分析与绘制

    一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...

  3. 【开源】专业K线绘制[K线主副图、趋势图、成交量、滚动、放大缩小、MACD、KDJ等)

    这是一个iOS项目雅黑深邃的K线的绘制. 实现功能包括K线主副图.趋势图.成交量.滚动.放大缩小.MACD.KDJ,长按显示辅助线等功能 预览图 最后的最后,这是项目的开源地址:https://git ...

  4. 分布式存储 FastDFS-5.0.5线上搭建

    前言:       由于公司项目需要,最近开始学习一下分布式存储相关知识,确定使用FastDFS这个开源工具.学习之初,自己利用VMware虚拟机搭建了一个5台机器的集群,摸清了安装过程中可能出现的问 ...

  5. SQL Saturday 北京将于7月25日举办线下活动,欢迎参加

          地点:北京微软(中国)有限公司[望京利星行],三层308室     报名地址:https://onedrive.live.com/redir?page=survey&resid=f ...

  6. 线上bug的解决方案--带来的全新架构设计

    缘由 本人从事游戏开发很多年一直都是游戏服务器端开发. 因为个人原因吧,一直在小型公司,或者叫创业型团队工作吧.这样的环境下不得不逼迫我需要什么都会,什么做. 但是自我感觉好像什么都不精通..... ...

  7. 用 Excel 测试“绘制两点间连线”的算法

    最近在研究和制作数字示波器,其中涉及一个小算法:需要将 ADC 采样的数值在 TFT LCD 屏幕上面显示并且用“线”连接起来. ADC 按照时序对输入电压采样后,记录的是一个个的数值,如果显示的时候 ...

  8. YYStock开源----iOS股票K线绘制第二版

    新的股票绘制粗来啦,欢迎围观star的说(*^__^*) 嘻嘻-- 捏合功能也准备完善了 Github:https://github.com/yate1996/YYStock 长按分时图+五档图 分时 ...

  9. iOS多线程之8.NSOPeration的其他用法

      本文主要对NSOPeration的一些重点属性和方法做出介绍,以便大家可以更好的使用NSOPeration. 1.添加依赖 - (void)addDependency:(NSOperation * ...

随机推荐

  1. Windows+Atlassian-Jira-6.0.4+MySql5.0安装破解汉化

     Windows+Atlassian-Jira-6.0.4+MySql5.0安装破解汉化 一:整理的安装程序 例如以下图: 文件太大.上传不到csdn上.有须要的联系. 新增的百度云盘下载:链接: ...

  2. Java Swing TextArea 滚动条和获得焦点

    JTextArea text=new JTextArea(); text.setLineWrap(true);//设置自己主动换行,之后则不须要设置水平滚动栏 JScrollPane scroll=n ...

  3. gradle(转)

    一.声明dependency     在build.gradle文件编辑以下代码: apply plugin: 'java' repositories { mavenCentral() } depen ...

  4. bzoj 1874 取石子游戏 题解 &amp; SG函数初探

    [原题] 1874: [BeiJing2009 WinterCamp]取石子游戏 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 334  Solved ...

  5. uva--165(邮资问题,dp)

    题意: 某国家发行k种不同面值的邮票,而且规定每张信封上最多仅仅能贴h张邮票. 公式n(h,k)表示用从k中面值的邮票中选择h张邮票,能够组成面额为连续的1.2.3,--n. n是能达到的最大面值之和 ...

  6. [原创].NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略

    原文:[原创].NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略 .NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略 前言:之前的讨论一直关注在怎么从D ...

  7. ubuntu 下搭建apache+python的运行环境

    ubuntu下怎么搭建apache+python运行环境,可以参考http://www.01happy.com/ubuntu-apache-mod-python/ ,这里只是简单的记录下步骤,本文主要 ...

  8. HDU ACM 1088 Write a simple HTML Browser

    意甲冠军:出现<br>总结,出现<hr>出口'-',今天的字加上各行的假设是长于80然后包,每个字之前,留下一个空白格,为了输出新行结束. #include<iostre ...

  9. 编程算法 - 数字数组中只出现一次 代码(C)

    数字数组中只出现一次 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 一个整型数组里除了两个数字以外, 其它的数字都出现了两次. 请敲代码找出这 ...

  10. MSMQ学习笔记

    这几天学习了一下MSMQ,虽然不能说非常深入的了解其机制与实际用法(具体项目的实现),但也要给自己的学习做个总结.学习心得如下: 一.MSMQ即微软消息队列.用于程序之间的异步消息通信,主要的机制就是 ...