扣丁学堂Android培训之异步处理应该如何解释详解
2019-01-03 16:08:53
394浏览
今天扣丁学堂Android培训老师给大家分享一篇关于Android中异步处理应该如何解释的技术介绍,首先在应用的开发中正确处理好主线程和子线程之间的关系,耗时的操作都放到子线程中处理,避免阻塞主线程,导致ANR。异步处理技术是提高应用性能,解决主线程和子线程之间通信问题的关键。那么异步技术链为:
Thread是Android中异步处理技术的基础,创建线程有两种方法。继承Thread类并重写run方法,实现Runnable接口并实现run方法,ndroid应用各种类型的线程本质上基于linux系统的pthreads,在应用层可以分为三种类型线程:
1、主线程:主线程也称为UI线程,随着应用启动而启动,主线程用来运行Android组件,同时刷新屏幕上的UI元素。Android系统如果检测到非主线程更新UI组件,那么就会抛出CalledFromWrongThreadException异常,只有主线程才能操作UI,是因为Android的UI工具包不是线程安全的。主线程中创建的Handler会顺序执行接受到的消息,包括从其他线程发送的消息。因此,如果消息队列中前面的消息没有很快执行完,那么它可能会阻塞队列中的其他消息的及时处理。
2、Binder线程:Binder线程用于不通过进程之间线程的通信,每个进程都维护了一个线程池,用来处理其他进程中线程发送的消息,这些进程包括系统服务、Intents、ContentProviders和Service等。在大部分情况下,应用不需要关心Binder线程,因为系统会优先将请求转换为使用主线程。一个典型的需要使用Binder线程的场景是应用提供一个给其他进程通过AIDL接口绑定的Service。
3、后台线程:在应用中显式创建的线程都是后台线程,也就是当刚创建出来时,这些线程的执行体是空的,需要手动添加任务。在Linux系统层面,主线程和后台线程是一样的。在Android框架中,通过WindowManager赋予了主线程只能处理UI更新以及后台线程不能直接操作UI的限制。
HandlerThread是一个集成了Looper和MessageQueue的线程,当启动HandlerThread时,会同时生成Looper和MessageQueue,然后等待消息进行处理,使用HandlerThread的好处是开发者不需要自己去创建和维护Looper,它的用法和普通线程一样。
AsyncQueryHandler是用于在ContentProvider上面执行异步的CRUD操作的工具类,CRUD操作会被放到一个单独的子线程中执行,当操作结束获取到结果后,将通过消息的方式传递给调用AsyncQueryHandler的线程,通常就是主线程。AsyncQueryHandler是一个抽象类,集成自Handler,通过封装ContentResolver、HandlerThread、AsyncQueryHandler等实现对ContentProvider的异步操作。
ExecutorFramework——创建和销毁对象是存在开销的,在应用中频繁出现线程的创建和销毁,那么会影响到应用的性能,使用Executor框架可以通过线程池机制解决这个问题,改善应用的体验。
AsyncTask是在Executor框架基础上进行的封装,它实现将耗时任务移动到工作线程中执行,同时提供方便的接口实现工作线程和主线程的通信。一个应用中使用的所有AsyncTask实例会共享全局的属性。
Loader是Android3.0开始引入的一个异步数据加载框架,它使得在Activity或者Fragment中异步加载数据变得简单,同时它在数据源发生变化时,能够及时发出消息通知。Loader是加载器框架的基类,封装了实现异步数据加载的接口,当一个加载器被激活后,它就会开始监听数据源并在数据发生改变时发送新的结果。AsyncTaskLoader是Loader的子类,它是基于AsyncTask实现的异步数据加载,它是一个抽象类,子类必须实现loadInBackground方法,在其中进行具体的数据加载操作。
以上就是关于扣丁学堂Android培训之异步处理应该如何解释详解,希望对同学们学习有所帮助,
想要了解更多关于Android开发方面内容的小伙伴,请关注扣丁学堂官网、微信等平台,扣丁学堂IT职业在线学习教育平台为您提供权威的Android开发环境搭建视频,扣丁学堂老师精心推出的Android视频教程定能让你快速掌握Android从入门到精通开发实战技能。
【关注微信公众号获取更多学习资料】
查看更多关于“Android开发技术”的相关资讯>>
标签:
Android培训
Android学习路线
Android视频教程
Android开发培训
Android培训班