• Android 中的异步下载


    网上提到最多的就是利用AsyncTask进行异步下载,用android-async-http第三方库的也比较多。这里写点注意事项。

    先说说android-async-http,这个库发送请求利用threadpool,也就是不在主线程做发送了,但是需要注意的是,如果你在主线程调用发送函数,网络请求是不在主线程中的,但是回调函数还是在主线程中的,这一点要注意!如果你的回调函数比较复杂,就会影响UI的使用. 这种情况,需要在回调中开新线程进行处理,也可以使用AsyncTask,在AsyncTask中利用同步请求获得所有资源后,进行加工,就不会阻塞主线程了。

    android-async-http回调函数在主线程中是因为处理回调的handler默认会建立在调用线程中,下面看看在ios中,回调函数的处理:


    先看看最普通的NSURLConnection类,

    + (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler

    注意,这个函数会创建新的线程发送网络请求。这里,可以通过queue来指定handler的处理线程。

    还提供了scheduleInRunLoop:forMode:(接受NSRunloop,更底层,更确切)  setDelegateQueue:(接受NSOperationQueue,用起来更方便指定回调函数执行的线程,注意两者不能同时调用!


    而nsurlsession 有delegateQueue (All delegate method calls and completion handlers related to the session are performed on this queue.)

    nsurlsession默认会创建新的线程发送task,即task 调用resume后,网络请求会在新的线程中执行。是不是一个task一个线程就不知道了,看不到具体的源码。

    http://www.objc.io/issue-5/from-nsurlconnection-to-nsurlsession.html

  • 相关阅读:
    分治思想
    二分查找---查找区间
    二分查找---有序数组的 Single Element
    Ogre碰撞检测
    JavaScript常用检测脚本(正则表达式)
    Js+XML 操作
    C++难点的一些总结
    MFC使用简单总结(便于以后查阅)
    vc中调用Com组件的所有方法详解
    OSG+VS2010+win7环境搭建---OsgEarth编译
  • 原文地址:https://www.cnblogs.com/breezemist/p/3853035.html
Copyright © 2020-2023  润新知