- 需求:定时任务
- 处理:不能在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
- 问题:
- 需求:文件传输
- 问题:新文件发过来后在系统媒体库中找不到新文件记录,必须得重启才能更新
- 解决:自己手动把新文件信息插入媒体库