gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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,甚至弹出ANR(Application Not Responding)窗口,这无疑对用户是十分不友好的.

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

?
1
2
3
4
5
6
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编程中关于单线程模型的理解与分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com