android_线
说明: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的属性)。
package com.example.b_05_thread01; import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView; public class MainActivity extends Activity { private TextView textView;
private Button button; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textViewId);
button = (Button) findViewById(R.id.buttonId); button.setOnClickListener(new ButtonListener());
} class ButtonListener implements OnClickListener { @Override
public void onClick(View v) {
Thread t = new MyThread();
t.start();
}
} // Worker Thread
class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
try {
Thread.sleep(1 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
textView.setText("来自于线程的改动"); // 程序会报错,由于仅仅能在主线程中改动ui。 }
}
}
}
执行结果:程序会报错,由于在主线程之外,原则上是不能改动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的属性)。
package com.example.b_05_thread01; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView; public class MainActivity extends Activity { private TextView textView;
private Button button;
private ProgressBar proBar; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textViewId);
button = (Button) findViewById(R.id.buttonId);
proBar = (ProgressBar) findViewById(R.id.proBarId);
button.setOnClickListener(new ButtonListener());
} class ButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
Thread t = new MyThread();
t.start();
}
} // Worker Thread
class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
proBar.setProgress(proBar.getProgress() + 1);
}
}
}
}
执行结果:成功。
3、既然在Worker Thread里面不能改动UI,那么就不须要Worker Thread。全部的事情在Main Thread里面操作,行不行呢? 答案是不行的!
当用户点击Button,不开启新的线程,直接在Main Thread里面休眠。
package com.example.b_05_thread01; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView; public class MainActivity extends Activity { private TextView textView;
private Button button;
private ProgressBar proBar; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textViewId);
button = (Button) findViewById(R.id.buttonId);
proBar = (ProgressBar) findViewById(R.id.proBarId);
button.setOnClickListener(new ButtonListener());
} // 在一个应用程序其中,主线程通经常使用于接收用户的输入,以及将运算的结果反馈给用户
// 所以说,对于一些堵塞的操作,必须放置在Worker Thread其中
class ButtonListener implements OnClickListener { @Override
public void onClick(View v) {
try {
Thread.sleep(5 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// Thread t = new MyThread();
// t.start();
}
} // // Worker Thread
// class MyThread extends Thread {
// @Override
// public void run() {
// for (int i = 0; i <= 100; i++) {
// try {
// Thread.sleep(100);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// proBar.setProgress(proBar.getProgress() + 1);
// }
// }
// }
}
执行结果:如图。
在一个应用程序其中。主线程通经常使用于接收用户的输入,以及将运算的结果反馈给用户,所以说,对于一些堵塞的操作。必须放置在Worker Thread其中。
欢迎交流 http://blog.csdn.net/ycwol/article/details/39900371
版权声明:本文博客原创文章,博客,未经同意,不得转载。
android_线的更多相关文章
- 关于解决python线上问题的几种有效技术
工作后好久没上博客园了,虽然不是很忙,但也没学生时代闲了.今天上博客园,发现好多的文章都是年终总结,想想是不是自己也应该总结下,不过现在还没想好,等想好了再写吧.今天写写自己在工作后用到的技术干货,争 ...
- 一起来玩echarts系列(一)------箱线图的分析与绘制
一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...
- 【开源】专业K线绘制[K线主副图、趋势图、成交量、滚动、放大缩小、MACD、KDJ等)
这是一个iOS项目雅黑深邃的K线的绘制. 实现功能包括K线主副图.趋势图.成交量.滚动.放大缩小.MACD.KDJ,长按显示辅助线等功能 预览图 最后的最后,这是项目的开源地址:https://git ...
- 分布式存储 FastDFS-5.0.5线上搭建
前言: 由于公司项目需要,最近开始学习一下分布式存储相关知识,确定使用FastDFS这个开源工具.学习之初,自己利用VMware虚拟机搭建了一个5台机器的集群,摸清了安装过程中可能出现的问 ...
- SQL Saturday 北京将于7月25日举办线下活动,欢迎参加
地点:北京微软(中国)有限公司[望京利星行],三层308室 报名地址:https://onedrive.live.com/redir?page=survey&resid=f ...
- 线上bug的解决方案--带来的全新架构设计
缘由 本人从事游戏开发很多年一直都是游戏服务器端开发. 因为个人原因吧,一直在小型公司,或者叫创业型团队工作吧.这样的环境下不得不逼迫我需要什么都会,什么做. 但是自我感觉好像什么都不精通..... ...
- 用 Excel 测试“绘制两点间连线”的算法
最近在研究和制作数字示波器,其中涉及一个小算法:需要将 ADC 采样的数值在 TFT LCD 屏幕上面显示并且用“线”连接起来. ADC 按照时序对输入电压采样后,记录的是一个个的数值,如果显示的时候 ...
- YYStock开源----iOS股票K线绘制第二版
新的股票绘制粗来啦,欢迎围观star的说(*^__^*) 嘻嘻-- 捏合功能也准备完善了 Github:https://github.com/yate1996/YYStock 长按分时图+五档图 分时 ...
- iOS多线程之8.NSOPeration的其他用法
本文主要对NSOPeration的一些重点属性和方法做出介绍,以便大家可以更好的使用NSOPeration. 1.添加依赖 - (void)addDependency:(NSOperation * ...
随机推荐
- C语言程序代写(QQ:928900200)
1.学生成绩统计 要求描述: 用结构数组实现学生信息的统计功能. struct student { long no; /*学号*/ char name[10]; /*姓名*/ char sex; /* ...
- 《HBase权威指南》读书笔记----简介
工作中要使用HBase,刚刚开始接触HBase,理解不深,只是记录一下 . HBase基于google的bigtable论文实现,属于nosql. 几个概念: (1)列(column):最基本单位为列 ...
- 最简单的ADABOOST人脸检测程序。COPY执行,前提是你配置OpenCV周围环境
#include "cv.h" #include "highgui.h" #include "stdio.h" void main() { ...
- netperf 而网络性能测量
本文首先介绍网络性能測量的一些基本概念和方法.然后结合 netperf 工具的使用.详细的讨论怎样測试不同情况下的网络性能. 汤凯 (tangk73@hotmail.com), 2004 年 7 月 ...
- 局部敏感哈希(Locality-Sensitive Hashing, LSH)方法介绍
局部敏感哈希(Locality-Sensitive Hashing, LSH)方法介绍 本文主要介绍一种用于海量高维数据的近似近期邻高速查找技术--局部敏感哈希(Locality-Sensitive ...
- 最佳新秀SSH十六Struts2它是如何工作的内部
前面说完了Spring.Hibernate,非常自然今天轮到struts了.struts的核心原理就是通过拦截器来处理client的请求,经过拦截器一系列的处理后,再交给Action.以下先看看str ...
- 基于lua的网页脚本开发语言cgilua(转)
这里为大家介绍基于lua脚本实现的网页开发语言,cgilua 介绍 cgilua使用Lua是一个用于创建动态网页的服务器端脚本语言.纯LUA脚本和LUA页(LP)的支持,cgilua.Lua脚本是一个 ...
- 採訪The Molasses Flood:BioShock Infinite 游戏之后又一大作
Xsolla有幸与Flame in the Flood游戏的开发人员之中的一个-----Forrest Dowling进行了採訪,Flame in the Flood这款非常棒的游戏在Kickstar ...
- HTML5实际和离线应用分析
当前离线Web申请书,即,该装置不能访问因特网时的应用的执行.HTML5离线应用重点,主要开发人员希望.步骤离线应用开发有:首先我们应该知道设备是否可以连接;然后,它也应该可以访问某些资源(像.CSS ...
- Could Not Connect
今天在写Quartz定时任务web应用时,访问项目页面出现Could Not Connect,后台也没报错. 然后我访问http://127.0.0.1:8080(Apache主页)的时候是正常的. ...