1、为什么用多线程?
答:核心思想是为了让程序表现得更加流畅,不阻塞主线程。基础知识:在安卓系统中,主线程又称之为UI线程,它负责渲染视图、对界面进行轮询的监听、分发事件到响应监听器并执行,而在主线程之外的其他线程是不能对视图和界面进行操作的。
2、什么是多线程?
答:线程是程序运行的基本单位,只要在主线程外新建线程即可称之为多线程。
3、Android多线程实现方式
我们按从简到繁的顺序来讲,多线程的基础使用方式包括如下几种:
1,handler.post/postDealy(Runnable)
2,view.post/postDealy(Runnable)
3,activity.runOnThread(Runnable)
4,new Thread(runnable).start
其中,new Thread(runnable).start是新开一个子线程,在非主线程执行。而前三种,都是添加一个线程作为任务的形式,回到主线程执行。而handler.post/postDealy和view.post/postDealy的实现方式其实都是基于handler的消息机制,只不过view.post/postDealy的回调时机是视图绘制完成,这个机制我们可以用来在view.post/postDealy中获取视图最终大小,视图的参数判断等。
好,我们现在已经知道了多线程的基本使用方法。比如先使用方法4新开一个子线程,在runnable中执行一些耗时操作,最后再通过前三种方法回到主线程来操作视图。而我们也可以简单使用handler.post/postDealy,新加一个线程任务到主线程的工作队列中,达到一个异步的效果,假如你想获取view的最终状态的话,用view.post/postDealy的效果更佳噢。
多线程的复合使用方式以及该如何使用:
1,handler加message,用消息管理,加广播或者eventBus配合使用。这种方式比较灵活,并且都是把runnable加回到主线程的任务中去执行,与视图随时交互。简单来说,这种回到主线程的方式,只能叫异步,而不是真正的多线程。
2,AsyncTask: 为 UI 线程与工作线程之间进行快速的切换提供一种简单便捷的机制。适用于当下立即需要启动,但是异步执行的生命周期短暂的使用场景。
3,HandlerThread: 为某些回调方法或者等待某些任务的执行设置一个专属的线程,拥有自己的looper和消息队列,并提供线程任务的调度机制。
4,ThreadPool: 把任务分解成不同的单元,分发到各个不同的线程上,进行同时并发处理,适用与主线程无关的多任务操作。
5,IntentService: 适合于执行由 UI 触发的后台 Service 任务,并可以把后台任务执行的情况通过一定的机制反馈给 UI。