面试系列----谈谈你对android多线程的理解
2017-04-19 09:52
806 查看
在android中,需要处理一些耗时的操作,这些操作不能运行在UI线程中,不然会造成线程的阻塞,所以就需要多线程操作
在日常项目中比较常用的多线程操作主要有:
1.Handler2.AsyncTask
3.IntentService
一:handler的理解
优点:对于对后台任务时,简单清晰
缺点:对于操作单个后台任务,代码过于繁琐
具体操作:
在主线程中创建Handler对象并实现handlmessage()方法,创建runnable线程,先在线程中执行耗时操作,
开启一个线程会相应的产生一个looper,在初始化looper的时候会创建一个消息队列MessageQueue();
执行完耗时操作,通过handler将消息发送到消息队列中、、looper轮询消息队列将消息取出来交给Handler,
Handler接收到取出来的消息,并根据消息类型做出相应的处理
二:AsyncTask的理解
优点:操作简单方便,过程可控
缺点:对于多异步操作更新UI会变得很繁琐
具体操作:
onPreExecute()运行在主线程中,开启线程前的准备操作,doInBackground()运行在子线程中,
onPreExecute()之后的操作,用于处理耗时操作,通过调用publishProcess()向 onProcessUpdata()推送消息
onProcessUpdata()运行在主线程中,当调用 publishProcess()方法时就会开启此方法,接收到推送过来的数据,更新UI进度页面
onPostExecute()运行在主线程中,当子线程耗时操作执行完毕后会调用此方法, doInBackground()返回的参数传递到这里来用于更新UI
调用execute()方法开启AsyncTask,类似runnable的start()方法
三:IntentService的理解
IntentService和普通的Service区别在于,IntentService在oncreate()方法中单独开启一个线程用于耗时操作通过onHandleIntent(Intent intent)方法来处理耗时操作
在耗时操作执行完毕之后,会自动关闭service不用手动关闭
如果同时new出多个IntentService对象进行耗时操作,oncreate()和ondestory()方法会执行一次,onstart()、onstartcommand()、onHandleIntent()会执行多次。
执行完毕自动关闭service
转载自面试系列—-谈谈你对android多线程的理解
相关文章推荐
- Android面试之---谈谈你对Android NDK的理解.
- Android面试之---谈谈你对Android NDK的理解
- Android面试之---谈谈你对Android NDK的理解.
- Android面试之---谈谈你对Android NDK的理解.
- Android面试之---谈谈你对Android NDK的理解
- Android面试之---谈谈你对Android NDK的理解
- Android面试之---谈谈你对Android NDK的理解
- Android面试之----谈谈你对Java中Native关键字的认识!
- 谈谈Android(Activity)的理解
- 谈谈Android 6.0运行时权限理解
- 谈谈我对Android中的消息机制的理解之Handler,Looper和MessageQueue的解释
- 【Android面试要点系列一】
- Android面试系列之一
- 对多线程下载文件的理解和使用ksoap2-android调用WebService的操作步骤
- Android进阶——多线程系列之Semaphore、CyclicBarrier、CountDownLatch
- Android面试系列文章2018之Android部分Fragment篇
- Android源码系列之深入理解ImageView的ScaleType属性
- Android OpenGL ES零基础系列(一):理解GLSurfaceView,GLSurfaceView.Render的基本用法
- Android面试系列之一
- 多线程面试秒杀系列1---面试题目