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

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

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

本文讲述了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,甚至d出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程序设计有所帮助。

总结

以上是内存溢出为你收集整理的Android编程中关于单线程模型的理解与分析全部内容,希望文章能够帮你解决Android编程中关于单线程模型的理解与分析所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1142222.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存