• Android 线程与主线程


    网络连接需要时间。Web服务器可能需要1~2秒的时间来响应,文件下载则耗时更久。考虑
    到这个因素,Android禁止任何主线程网络连接行为。即使强行为之,Android也会抛出
    NetworkOnMainThreadException异常。
    这是为什么呢?要想知道答案,首先要知道什么是线程,什么是主线程,主线程有什么用途。
    线程是个单一执行序列。单个线程中的代码会逐步执行。所有Android应用的运行都是从主
    线程开始的。然而,主线程不是线程那样的预定执行序列。相反,它处于一个无限循环的运行状
    态,等着用户或系统触发事件。一旦有事件触发,主线程便执行代码做出响应。

    把应用想象成一家大型鞋店,闪电侠是这家店唯一的员工。(是不是人人梦寐以求的场景?)
    要让客户满意,他需要做大量的工作,如布置商品、为顾客取鞋、为顾客量尺寸等。闪电侠并非
    浪得虚名,所以,即便所有工作都由他一人完成,客户也能得到及时响应,感到满意。
    为及时完成任务,闪电侠不能在单一事件上耗时过久。要是一批货丢了怎么办?这时,必须

    有人花时间打电话调查此事。假设让闪电侠去做,他在忙于联络查找货物时,店里等候的顾客可
    就不耐烦了。
    闪电侠就像应用里的主线程。它运行着所有更新UI的代码,其中包括响应activity的启动、按
    钮的点击等不同UI相关事件的代码。(由于响应的事件基本都与用户界面相关,主线程有时也叫
    作UI线程。)
    事件处理循环让UI代码总是按顺序执行。这样,事件就能一件件处理,不用担心互相冲突,
    同时代码也能够快速执行,及时响应。目前为止,我们编写的所有代码(刚刚使用AsyncTask工
    具类完成的代码除外)都是在主线程中执行的。

    超越主线程

    连接网络如同致电分销商找丢失的货物:相比其他任务,它更耗时。等待响应期间,用户界
    面毫无反应,这可能会导致应用无响应(application not responding,ANR)现象发生。
    如果Android系统监控服务确认主线程无法响应重要事件,如按下后退键等,则应用无响应
    会发生。

    回到假想的鞋店中,要解决问题,自然想到再雇一名闪电侠专门负责联络供销商。Android
    系统中的做法与之类似,即创建一个后台线程,然后从该线程访问网络。
    怎样使用后台线程最容易?使用AsyncTask工具类。

    参考:Android编程权威指南-第3版

  • 相关阅读:
    [C++] const 限定符
    [国嵌笔记][028][Bootloader设计蓝图]
    [国嵌笔记][027][ARM协处理器访问指令]
    [国嵌笔记][026][ARM伪指令]
    [国嵌笔记][025][ARM指令分类学习]
    [国嵌笔记][024][ARM汇编编程概述]
    [国嵌笔记][023][ARM寻址方式]
    [国嵌笔记][021-022][ARM处理器工作模式]
    [国嵌笔记][020][ARM家族大检阅]
    [国嵌笔记][019][Eclipse集成开发环境]
  • 原文地址:https://www.cnblogs.com/onelikeone/p/9460282.html
Copyright © 2020-2023  润新知