广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-05-04 21:20:49 次阅读 稿源:互联网
    广告

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

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告