AndroidDev 板


LINE

我们都知道要开一个thread去改UI的话是不行的,需要用handler机制把thread用 sendmessage的方式回call main thread的handle message才能修改 这边有个疑问是 这样跟直接用method在main thread中修改UI有什麽差异呢? 因为用handler新开的thread虽然是在後台跑 但是回call回来还是block住main thread不是吗? 这样跟用method有什麽不同呢? --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 124.219.31.93
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1426841969.A.79C.html
1F:→ hellogg1: 所以你不能在main thread做耗时的事情否则会ANR 03/20 17:07
2F:→ issuemylove: UI的修改前,可能会有大量的计算 大量计算跑在main 03/20 17:28
3F:→ issuemylove: 下略 你懂的 03/20 17:28
4F:→ ntuleo: 大量计算开thread,修改UI再call method 03/20 19:42
5F:→ ntuleo: 这样不使用handler也可以达到handler改UI的效果不是吗? 03/20 19:43
6F:→ ntuleo: 不了解的点是两种方法都会block main thread,那为什麽需要 03/20 19:47
7F:→ ntuleo: 用比较麻烦的handler呢? 03/20 19:47
8F:推 sdyy: 怎麽会一样 例如你要载入一张网路图片 把图片载好花1秒 03/20 20:32
9F:→ sdyy: 用main thread跑 你这一秒都被卡住 而另开thread 则只要指定 03/20 20:32
10F:→ sdyy: 载好的图片 记忆体都已摆好也就不会block到其他UI画面 03/20 20:33
11F:→ corrupt003: call method 在thread 底下做的话,还是跑在thread阿 03/20 20:43
12F:→ corrupt003: 会用handler是因为一般情形下handler是绑ui thread 03/20 20:47
13F:→ ssccg: call回来是在main thread的message queue上排程,不会直接 03/20 20:48
14F:→ ssccg: block main thread,会block就是你用错了 03/20 20:48
15F:→ ssccg: handler是把message queue包装起来用,跟开thread是两回事 03/20 20:49
16F:→ corrupt003: 所以有复杂计算在thread做,做完需要改ui时用handler 03/20 20:51
17F:→ corrupt003: ,handler里 call method才会在 ui thread 更新ui 03/20 20:51
18F:→ ssccg: 你看起来跟thread不太熟,直接call method是在同一个thread 03/20 20:52
19F:→ ntuleo: 感谢大家,我目前的理解是这样的 03/20 21:57
20F:→ ntuleo: handler诞生的主要原因是主线程要和子线程沟通用的 03/20 21:57
21F:→ ntuleo: 一般thread做不到这一点 03/20 21:57
22F:→ ntuleo: 所以比较heavy的工作放在thread做,要改ui再用handler 03/20 21:57
23F:→ ntuleo: 通知main thread修改 03/20 21:58
24F:→ ntuleo: 但今天如果只是简单的setText,那其实直接call就可以了 03/20 21:58
25F:→ ntuleo: 开thread再用handler call和直接call在这是没有区别的 03/20 21:58
26F:→ ntuleo: 因为中间没有复杂的运算 03/20 21:58
27F:→ qweqweqweqwe: 是阿.. 所以这种就直接setText 就可以了阿.. 03/20 22:00
28F:→ ssccg: 有什麽不同你试一下就知道,只有在main thread才可以改UI 03/20 22:26
29F:→ ssccg: 直接call你会得到一个CalledFromWrongThreadException 03/20 22:33
30F:→ ckvir: 回call回来又不会block住 03/22 03:10
31F:→ KeySabre: main thread已经很忙,要更新UI,又要处理touch event、 03/23 18:08
32F:→ KeySabre: key event等,如果用来处理其他事情,使得画面无法即时 03/23 18:08
33F:→ KeySabre: 更新,触控事件无法即时处理,操作就会卡顿,人眼认为fp 03/23 18:08
34F:→ KeySabre: s 30是顺畅;另外我记得系统每16ms会draw一次,阻碍到就 03/23 18:08
35F:→ KeySabre: 会感觉不顺畅。Android有ANR机制保护,可让使用者强制 03/23 18:08
36F:→ KeySabre: 关闭程序,避免main thread被恶意占用使得手机被绑架。 03/23 18:08
37F:→ KeySabre: 另外broadcast receiver, service等也要注意,他们在系 03/23 18:08
38F:→ KeySabre: 统内也有对应的回应时间控制。 03/23 18:08
39F:→ KeySabre: Handler是Android提供让你做非同步调用的机制所含的一 03/23 18:23
40F:→ KeySabre: 个类别,大致上就是你可以开一个thread然後放Looper.pre 03/23 18:23
41F:→ KeySabre: pare(),Looper会给这个thread一个message queue并且用 03/23 18:23
42F:→ KeySabre: 回圈去取,Handler必须与Looper搭配,当有message时就会 03/23 18:23
43F:→ KeySabre: 发到Handler的handleMessage()。Handler的无参数建构子 03/23 18:23
44F:→ KeySabre: 会用当前thread的looper,所以你在main thread创handler 03/23 18:23
45F:→ KeySabre: ,就能利用main thread本来就有的looper,当你从其他thr 03/23 18:23
46F:→ KeySabre: ead发送讯息给这个handler时,最终就可以在main thread 03/23 18:23
47F:→ KeySabre: 处理这个讯息。如果要给别的thread一个handler,用法前 03/23 18:24
48F:→ KeySabre: 面说过了,不然也可直接利用HandlerThread这个类别。 03/23 18:24







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP