Android(安卓)中的AsyncTask的使用心得
16lz
2022-04-29
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不能完全取代线程,在一些逻辑较为复杂或者需要在后台反复执行的逻辑就可能需要线程来实现了。
更多相关文章
- android中Invalidate和postInvalidate的区别
- Android简明开发教程十九:线程 Bezier曲线
- Android面试题(一)
- andr
- android JNI层线程回调Java函数
- Android作为SocketServer以及手机IP问题
- android handler 多线程demo
- mybatisplus的坑 insert标签insert into select无参数问题的解决
- Python技巧匿名函数、回调函数和高阶函数