为了账号安全,请及时绑定邮箱和手机立即绑定

不知道在哪里写的代码是主线程,在哪里写的代码是子线程?感觉像是听天书,完全听不懂呀~则么办呀?

不知道在哪里写的代码是主线程,在哪里写的代码是子线程?感觉像是听天书,完全听不懂呀~则么办呀?


正在回答

2 回答

在Android里可以这么理解,因为在android里你可以把UI界面当做主线程,你不能因为下载东西就一直显示下载,用户体验不好,也不被google容许,所以你点击下载就是开启子线程去下载了,手机页面该看什么你就看什么,等下载好子线程就发个message给handler它来更新UI,在你的手机界面显示或弹出一个下载好了的消息,如果不用handler下载好了你也不知道,还得自己去看。Handler和Thread:子线程是不能更新UI的,所以用Thread开启子线程后,如果需要更新UI,就通过Handler来更新UI.

而AsyncTask 中:

doInBackground(Params…) 属于子线程,后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以 调用publicProgress(Progress…)来更新任务的进度。

onPostExecute(Result)  相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回


1 回复 有任何疑惑可以回复我~

这是java中的知识,差不多在Thread和Runnable的重写run方法中就属于开启一个子线程,AsyncTask中的doIn...方法中也属于开启子线程。(打比方:主线程就是经理,没人的时候什么事都自己一件一件的干,干了什么事一回想,按时间线可以穿起来,多线程就是招了几个业务员,有什么排队买票啊,摇号买车啊之类的耗时任务,交给他们,但买了票,摇了号的结果是什么还是要报告给经理来处理,业务员不能也无权处理。)

1 回复 有任何疑惑可以回复我~
#1

hengly 提问者

非常感谢。可以这样理解吗,多线程就是用来减轻子线程的任务,但是任务后的结果也还是要通过主线程。还有Handle是和Thread要一起用吗
2016-03-11 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android面试常客Handler详解
  • 参与学习       54881    人
  • 解答问题       183    个

学Android开发,必学Handler,也是Android面试常客

进入课程

不知道在哪里写的代码是主线程,在哪里写的代码是子线程?感觉像是听天书,完全听不懂呀~则么办呀?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信