• anroid之异步不如异步


    executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)

    使用自定义的CorePoolSize为7的Executor(Executors.newFixedThreadPool(7)):

    使用未设限制的Executor(Executors.newCachedThreadPool()):

    建议使用AsyncTask而不是使用Thread,但是AsyncTask似乎又有它的限制,这就要根据具体的需求情况而选择合适的工具

    • 改善你的设计,少用异步处理

      线程的开销是非常大的,同时异步处理也容易出错,难调试,难维护,所以改善你的设计,尽可能的少用异步。对于一般性的数据库查询,少量的I/O操作是没有必要启动线程的。

    • 与主线程有交互时用AsyncTask,否则就用Thread

      AsyncTask被设计出来的目的就是为了满足Android的特殊需求:非主线程不能操作(UI)组件,所以AsyncTask扩展Thread增强了与主线程的交互的能力。如果你的应用没有与主线程交互,那么就直接使用Thread就好了。

    • 当有需要大量线程执行任务时,一定要创建线程池

      线程的开销是非常大的,特别是创建一个新线程,否则就不必设计线程池之类的工具了。当需要大量线程执行任务时,一定要创建线程池,无论是使用AsyncTask还是Thread,因为使用AsyncTask它内部的线程池有数量限制,可能无法满足需求;使用Thread更是要线程池来管理,避免虚拟机创建大量的线程。比如从网络上批量下载图片,你不想一个一个的下,或者5个5个的下载,那么就创建一个CorePoolSize为10或者20的线程池,每次10个或者20个这样的下载,即满足了速度,又不至于耗费无用的性能开销去无限制的创建线程。

    • 对于想要立即开始执行的异步任务,要么直接使用Thread,要么单独创建线程池提供给AsyncTask

      默认的AsyncTask不一定会立即执行你的任务,除非你提供给他一个单独的线程池。如果不与主线程交互,直接创建一个Thread就可以了,虽然创建线程开销比较大,但如果这不是批量操作就没有问题。

    • Android的开发没有想像中那样简单,要多花心思和时间在代码上和测试上面,以确信程序是优质的.
    • 最后一点,应用中少量的东西,临时的使用没有限制的方法来做,大量,常规的用原生的有限制的方法。这里边的意思是小的临时的操作,即使执行了也不会造成多大影响,常规操作不做限制,会造成整体的卡顿,断崖式的下跌,这就是所谓的越大越要守规矩
    • 其他相关链接:
    • http://blog.csdn.net/u012303938/article/details/47127183
  • 相关阅读:
    123我爱你
    cs231n学习笔记(一)计算机视觉及其发展史
    Problem B: 字符串类(II)
    Problem A: 字符串类(I)
    Problem E: 新奇的加法运算
    Problem D: 判断两个圆之间的关系
    Problem C: 质心算法
    Problem B: 我们来做个Student类吧!
    Problem A: 克隆人来了!
    Problem H: STL——表达式求值
  • 原文地址:https://www.cnblogs.com/wcLT/p/7782213.html
Copyright © 2020-2023  润新知