zoukankan      html  css  js  c++  java
  • Android 线程与主线程

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

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

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

    超越主线程

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

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

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

  • 相关阅读:
    windows7 端口查看以及杀死进程释放端口
    字符设备驱动模块与测试代码编写。
    c++项目范例
    较复杂makefile跟lds脚本程序的编写
    S5PV210时钟,看门狗定时器
    S5PV210中断处理
    arm 异常处理结构
    arm指令系统
    arm体系结构
    s5pv210 的启动
  • 原文地址:https://www.cnblogs.com/onelikeone/p/9460282.html
Copyright © 2011-2022 走看看