Android编程中关于单线程模型的理解与分析

所属分类: 软件编程 / Android 阅读数: 798
收藏 0 赞 0 分享

本文讲述了Android编程中关于单线程模型的理解与分析。分享给大家供大家参考,具体如下:

当一个Android程序启动时,Android系统会同时启动一个对应的主线程(Main Thread)。

由于这个主线程(Main Thread)主要的任务就是对UI相关的事件进行处理(例如显示文本,处理点击事件,显示图片等),系统对每一个组件的调用都是从主线程中分发出去的,所以又常被称为UI线程。

IMP,Android单线程模型的核心原则就是:只能在UI线程(Main Thread)中对UI进行处理。
为了提高Performance,Android对UI处理的相关method都不是synchronized,所以当你试图用其他线程来对UI进行操作时,会抛出如下异常:

android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

当然,这并非鼓励我们将一切操作都放在UI线程当中进行。

有些十分费时但对UI更新影响很小的操作(如网络操作,数据库操作等),若一起放在UI线程当中去进行的话,会导致UI Performance十分poor,对的,非常非常poor,甚至弹出ANR(Application Not Responding)窗口,这无疑对用户是十分不友好的。

Ps:据我所知,Android SDK在4.0版本之后就不支持在Main Thread中直接进行网络相关操作,除非你厚颜无耻地在主线程中加上如下代码:

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() 
  .detectDiskReads().detectDiskWrites().detectNetwork() 
  .penaltyLog().build()); 
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() 
  .detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath() 
  .build());

因此,Android单线程模型的原则总结起来大致有两点:

1.只能在UI线程(Main Thread)中对UI进行处理,不要在UI线程之外访问Android UI toolkit

2.不要用费时的操作阻塞UI线程

关于如何处理好Android程序中的多线程,可以参考Android官方training

希望本文所述对大家Android程序设计有所帮助。

更多精彩内容其他人还在看

Retrofit2日志拦截器的使用

这篇文章主要介绍了Retrofit2日志拦截器的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android创建外部lib库及自定义View的图文教程

这篇文章主要给大家介绍了关于Android创建外部lib库及自定义View的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android分享微信小程序失败的一些事小结

这篇文章主要给大家介绍了关于Android分享微信小程序失败一些事,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android分享微信小程序技巧之图片优化

这篇文章主要给大家介绍了关于Android分享微信小程序技巧之图片优化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android Viewpager实现无限循环轮播图

这篇文章主要为大家详细介绍了Android Viewpager实现无限循环轮播图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android中的Bitmap序列化失败的解决方法

这篇文章主要介绍了Android中的Bitmap序列化失败的解决方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Android自定义通用标题栏CustomTitleBar

这篇文章主要为大家详细介绍了Android自定义通用标题栏CustomTitleBar,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android组合控件自定义标题栏

这篇文章主要为大家详细介绍了Android组合控件自定义标题栏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android自定义复合控件实现通用标题栏

这篇文章主要为大家详细介绍了Android自定义复合控件实现通用标题栏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

ExpandableListView实现简单二级列表

这篇文章主要为大家详细介绍了ExpandableListView实现简单二级列表,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多