Android —— 项目坑总结

    • 需求:定时任务
  • 处理:不能在service中循环调用 AsyncTask执行长时间任务,会造成堵塞。要改用Thread或CachedThreadPool线程池。
  • 原因:
    在官方文档中指出, AsyncTasks should ideally be used for short operations, 就是说AsyncTask执行的任务应该是一些短时间内可以完成的任务, 因为在Android3.0之后, 默认情况下, 同一时间只能有一个AsyncTask在运行, 也就是说所有的task都是串行运行的。所以如果某个task执行时间很长, 会导致后面的task长时间等待, 当然也可以通过调executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR), 可以同时运行5个Task。
    如果最大同时运行5个Task不能满足要求,就要自己使用线程池了。
    • 需求:加载大图防止内存溢出问题
  • 问题:decodeStream解析图片一直为null
  • 原因:Android 的一个bug,input 流不能用两次 可以把流转换成数组,然后再用该方法
    • 需求:科大讯飞语音转文字
  • 问题:
    1.组件加载失败
    解决:so包缺失
    2.用户校验失败
    解决:libmsc.so一定要用自己id下载的SDK,因为SDK和appid是绑定的,拷贝旧项目的so是不行的!
    • 问题:mImageView.getDrawingCache()取值为空
  • 解决:
    setImageBitmap()/setImageDrawable设置图片的方式才可以取到缓存
    setImageResource方法设置图片则缓存取值为null。
    官方建议用setImageDrawable代替setImageBitmap,这样可以减少new的对象。实际上setImageBitmap方法就是把Bitmap对象封装成Drawable对象,然后调用setImageDrawable
    • 需求:文件传输
  • 问题:新文件发过来后在系统媒体库中找不到新文件记录,必须得重启才能更新
  • 解决:自己手动把新文件信息插入媒体库

你可能感兴趣的:(Android —— 项目坑总结)