【Android面试】线程相关面试题分享

1·、Android中还了解哪些方便线程切换的类?

  • AsyncTask:底层封装了线程池和Handler,便于执行后台任务以及在子线程中进行UI操作。
  • HandlerThread:一种具有消息循环的线程,其内部可使用Handler。
  • IntentService:是一种异步、会自动停止的服务,内部采用HandlerThread。

2、讲讲AsyncTask的原理

  • AsyncTask中有两个线程池(SerialExecutor和THREAD_POOL_EXECUTOR)和一个Handler(InternalHandler),其中线程池SerialExecutor用于任务的排队,而线程池THREAD_POOL_EXECUTOR用于真正地执行任务,InternalHandler用于将执行环境从线程池切换到主线程。
  • sHandler是一个静态的Handler对象,为了能够将执行环境切换到主线程,这就要求sHandler这个对象必须在主线程创建。由于静态成员会在加载类的时候进行初始化,因此这就变相要求AsyncTask的类必须在主线程中加载,否则同一个进程中的AsyncTask都将无法正常工作。

3、IntentService有什么用 ?

IntentService可用于执行后台耗时的任务,当任务执行完成后会自动停止,同时由于IntentService 是服务的原因,不同于普通Service,IntentService可自动创建子线程来执行任务,这导致它的优先级 比单纯的线程要高,不容易被系统杀死,所以IntentService比较适合执行一些高优先级的后台任务。

4、直接在Activity中创建一个thread跟在service中创建一个thread之间的区别?

  • 在Activity中被创建:该Thread的就是为这个Activity服务的,完成这个特定的Activity交代的任务, 主动通知该Activity一些消息和事件,Activity销毁后,该Thread也没有存活的意义了。
  • 在Service中被创建:这是保证最长生命周期的Thread的唯一方式,只要整个Service不退出,Thread 就可以一直在后台执行,一般在Service的onCreate()中创建,在onDestroy()中销毁。所以,在 Service中创建的Thread,适合长期执行一些独立于APP的后台任务,比较常见的就是:在Service中 保持与服务器端的长连接。

5、ThreadPoolExecutor的工作策略 ?

ThreadPoolExecutor执行任务时会遵循如下规则

  • 如果线程池中的线程数量未达到核心线程的数量,那么会直接启动一个核心线程来执行任务。
  • 如果线程池中的线程数量已经达到或则超过核心线程的数量,那么任务会被插入任务队列中排队等待执行。
  • 如果在第2点无法将任务插入到任务队列中,这往往是由于任务队列已满,这个时候如果在线程数量未 达到线程池规定的最大值,那么会立刻启动一个非核心线程来执行任务。
  • 如果第3点中线程数量已经达到线程池规定的最大值,那么就拒绝执行此任务,ThreadPoolExecutor 会调用RejectedExecutionHandler的rejectedExecution方法来通知调用者。

6、Handler、Thread和HandlerThread的差别?

  • Handler:在android中负责发送和处理消息,通过它可以实现其他支线线程与主线程之间的消息通 讯。
  • Thread:Java进程中执行运算的最小单位,亦即执行处理机调度的基本单位。某一进程中一路单独运 行的程序。
  • HandlerThread:一个继承自Thread的类HandlerThread,Android中没有对Java中的Thread进行 任何封装,而是提供了一个继承自Thread的类HandlerThread类,这个类对Java的Thread做了很多便 利的封装。HandlerThread继承于Thread,所以它本质就是个Thread。与普通Thread的差别就在 于,它在内部直接实现了Looper的实现,这是Handler消息机制必不可少的。有了自己的looper,可 以让我们在自己的线程中分发和处理消息。如果不用HandlerThread的话,需要手动去调用 Looper.prepare()和Looper.loop()这些方法。
#android面试#
全部评论

相关推荐

头像
03-14 11:23
已编辑
北京邮电大学 管理咨询
211勇闯初创小公司头破血流系列3这件事不是发生在我身上的,但前同事们参与创作的积极性空前高涨,为了习惯,还是都采用第一人称的视角来看这出大戏。有一天老板在我们的眼皮底下接了一个电话,最终敲定了去北京出差的时间,下周一。他得意洋洋地说,这单下来保底五百万的流水,如果成了,我们都能得到五位数的提成。这对于一群刚上班的人来说是天大的诱惑,我们经历了周末的无偿加班,把他去北京所需要的文件都准备好了。只是在去北京的周一当天,老板睡过头了。整个上午都没见他的踪影,给他发文件也不会,打电话问问题也不接,直到中午才姗姗来迟。当然,这只是拉开了这场恐怖出差的序幕。只见他来了也不紧不慢的,手指在办公室转了一圈,...
姜大力:补充: 1.五百万的单子根本没有五百万,只是过去展示拼装的产品并简单考察。该项目只是竞标,项目内容是商业街区改造; 2.决策是当天上午10点半左右老板珊珊来迟后突发奇想去北京,中午1点在催促下着急出发,没有任何出差补助; 3.出发之前已经知道进京证不好使了,但还是执意要开车去; 4.实习生实打实连续开了***小事车,非常辛苦,工资在转正后只有两千五; (有疑问会继续补充)
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务