文档章节

Android线程——Mars Android开发视频之第二季第五集(重)

周田
 周田
发布于 2015/08/23 20:25
字数 566
阅读 107
收藏 6

1.回顾JAVA中的线程

  • 线程的两种实现方式

1 继承Thread类

2 实现Runnable接口

两者区别:

  • 前者代表一个线程

  • 后者代表线程体,也就是线程要执行的代码。

  • 多线程同步

多个线程同时访问一个资源,为了避免出现错误,就要实现线程同步。 让这个资源一次只能被一个线程访问。

2. MainThread与WorkerThread

  • MainThread=主线程=UI线程

  • 除此之外的线程叫WorkerThread

  • 所有UI由主线程操作

  • 可能产生阻塞的操作放在Worker Thread中操作

  • 大多数情况下WorkerThread不能操作UI

在安卓中,自己创建出来的线程都叫WorkerThread,所以,除此之外,我们所有的操作都是在MainThread中进行的。

下面这个实验用来证明WorkerThread中不能操作UI:

2.1 WorkerThread中不能操作UI:

具体的实现是:

点击按钮,启动一个线程; 在这个线程中,将试图修改文本域的内容;

输入图片说明

线程内部类: 修改文本域内容

	class MyThread extends Thread {
		public void run(){
			try {
				Thread.sleep(2 * 1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			textView_1.setText("OK");
		}
	}

按钮监听器类: 创建启动WorkerThread线程

	class ButtonListener implements OnClickListener {
		public void onClick(View v) {
			new MyThread().start();
		}
	}

点击按钮的结果: 提示只有在拥有创建View权限的原始线程(主线程)中才能操作View。

输入图片说明

但一些特殊的组件可以在WorkerThread中被操作,如: · progressbar的setProgress方法

2.2 WorkerThread的作用

Worker Thread虽然不能操作UI,但是它有其他作用:

处理那些可能引发阻塞的操作,如大数据处理。

因为,如果这些可能引发阻塞的操作如果在主线程中处理的话,就可能会引发ANR问题。

  • ANR:应用程序未响应(Application Not Responding)

下面通过一个例子再现这个ANR问题。

例子实现的是:

在主线程中,点击按钮,直接休眠10秒,期间频繁点击屏幕,就会出现ANR提示框。

按钮监听器类:

	class ButtonListener implements OnClickListener {
		public void onClick(View v) {
			try {
				Thread.sleep(10 * 1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

点击按钮,屏幕卡住,再点几下屏幕,10秒后:

输入图片说明

© 著作权归作者所有

周田
粉丝 4
博文 122
码字总数 22818
作品 0
德阳
私信 提问
《老罗Android开发视频教程》老罗来交国庆的答卷了

  之前在博客园、开源中国、安卓巴士发表的《老罗将死,或者Android也将就换代,但是互联网的,共享,互助精神将永存》,计划出300集免费的、高质量的、全面的Android开发视频教程,得到了...

qixinghaitang
2012/10/09
634
2
关于Android初学者的学习线路的相关知识

这两天上班还没开始正式的培训,所以在网上到处查询资料找到了几个比较好的网站和论坛在此推荐给大家:www.android123.com.cn http://android.yaohuiji.com 上面发布了博主的很多Android方面...

长平狐
2012/06/18
260
1
Intent对象初步——Mars Android开发视频之第二季第四集(重)

Intent对象的基本概念 Intent是安卓应用程序组件之一 Intent对象在安卓系统当中表示一种意图 Intent当中最重要的内容是action与data 2. Intent对象的基本使用方法 2.1 从一个Activity跳转到另...

周田
2015/08/23
43
0
《老罗Android开发视频》开源、分享、互助改变世界

大家好,我是老罗。经过了一年的跌荡变迁,《老罗Android开发视频》也在大家的努力下传播的越来越活跃,大家对视频的反响让我也看到了未来的希望。我说的这个希望是对于技术的分享,互助精神...

于叶弦
2013/10/18
1K
15
【菜鸟入门】——一些Android学习资源和一点个人感受

转自:http://www.cainiaobbs.com/forum.php?mod=viewthread&tid=419&extra=page%3D1 不知不觉学习Android有大半年的时间了,虽然中途用了些时间去学习Java。 总的来说这半年里过得很充实,每...

莫侠
2012/12/03
678
0

没有更多内容

加载失败,请刷新页面

加载更多

maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
今天
8
0
Linux创建yum仓库

第一步、搞定自己的光盘 #创建文件夹 mkdir -p /media/cdrom #挂载光盘 mount /dev/cdrom /media/cdrom #编辑配置文件使其永久生效 vim /etc/fstab 第二步,编辑yun源 vim /ect yum.repos.d...

究极小怪兽zzz
今天
6
0
jar 更新部分文件

C:\Program Files (x86)\Java\jdk1.8.0_102\bin>jar -hIllegal option: hUsage: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...Options: -c c......

圣洁之子
今天
9
0
OSChina 周六乱弹 —— 感谢女装红薯开办了这个网站

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @胖达panda:分享歌词: 我有一只小毛驴我从来也不骑,有一天我心血来潮骑着去赶集,我手里拿着小皮鞭我心里正得意,不知怎么哗啦啦,我摔了一...

小小编辑
今天
2.7K
13
DDD(四)

1,引言 软件开发者大多趋向于将关注点放在数据上,而不是领域上。这对于刚入门的DDD的新手而言也是如此。以我目前的思考方式,数据库依然占据主要的地位。开发一个功能,首先我就会考虑我会...

MrYuZixian
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部