Android 中的AsyncTask的使用心得

在android程序中一定不能阻塞UI线程,否则很容易就会弹出no respond 的对话框,导致程序退出。为了避免这种情况,一般需要较长时间执行的任务都放在线程中去执行,如从网上下载图片在界面的某个区域显示。但是使用线程回导致cpu开销过大,并且当线程管理不好时也会弹出no respond框。android提供了AsyncTask类用来处理这种情况;例如需要下载图片,然后在songImagButton中显示,下载的逻辑在songImageButton的initImage方法中。

private class DrawImageTask extends AsyncTask<Void,Integer,Void>{//更新图片显示区域,显示图片@Overrideprotected void onPostExecute(Void params) {// TODO Auto-generated method stubsongImageButton.invalidate();this.cancel(false);}//下载图片@Overrideprotected Void doInBackground(Void... params) {// TODO Auto-generated method stubsongImageButton.initImage();return null;}}

一般在doInBackground中执行后台的逻辑,如下载图片或其他需要耗时长的任务,onPostExecute方法用来对界面进行操作。如果后台的逻辑有返回值,则由doInBackground返回然后传入onPostExecute方法,然后更新界面。doInBackground方法和onPostExecute的参数必须对应,这两个参数在AsyncTask声明的泛型参数列表中指定,第一个为doInBackground接受的参数,第二个为显示进度的参数,第第三个为doInBackground返回和onPostExecute传入的参数。

当然我个人认为AsyncTask不能完全取代线程,在一些逻辑较为复杂或者需要在后台反复执行的逻辑就可能需要线程来实现了。

更多相关文章

  1. android handler 多线程demo
  2. android JNI层线程回调Java函数
  3. Android 使用Thread+Handler实现非UI线程更新UI界面
  4. Android异步加载图像小结(含线程池,缓存方法)[转]
  5. Android的UI设计与后台线程交互

随机推荐

  1. 0324作业
  2. shell变量的类型
  3. 2021上半年软考报名流程详解!赶紧了解一下
  4. 驱动下一代技术浪潮,我们更专注价值落地
  5. Microsoft Ignite 2021:Azure中管理VM的新
  6. redis中的 geospatial(地理位置)使用
  7. 长相对于经济学的学术生涯重要吗? 牛年首
  8. 天下回归, 无内生性不破, 唯此神文不破,
  9. 各地软考报考已开始,请大家及时报考
  10. 深度排序模型在淘宝直播的演进与应用