Android 中的AsyncTask的使用心得
在android程序中一定不能阻塞UI线程,否则很容易就会弹出no respond 的对话框,导致程序退出。为了避免这种情况,一般需要较长时间执行的任务都放在线程中去执行,如从网上下载图片在界面的某个区域显示。但是使用线程回导致cpu开销过大,并且当线程管理不好时也会弹出no respond框。android提供了AsyncTask类用来处理这种情况;例如需要下载图片,然后在songImagButton中显示,下载的逻辑在songImageButton的initImage方法中。
private class DrawImageTask extends AsyncTask<Void,Integer,Void>{
//更新图片显示区域,显示图片
@Override
protected void onPostExecute(Void params) {
// TODO Auto-generated method stub
songImageButton.invalidate();
this.cancel(false);
}
//下载图片
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
songImageButton.initImage();
return null;
}
}
一般在doInBackground中执行后台的逻辑,如下载图片或其他需要耗时长的任务,onPostExecute方法用来对界面进行操作。如果后台的逻辑有返回值,则由doInBackground返回然后传入onPostExecute方法,然后更新界面。doInBackground方法和onPostExecute的参数必须对应,这两个参数在AsyncTask声明的泛型参数列表中指定,第一个为doInBackground接受的参数,第二个为显示进度的参数,第第三个为doInBackground返回和onPostExecute传入的参数。
当然我个人认为AsyncTask不能完全取代线程,在一些逻辑较为复杂或者需要在后台反复执行的逻辑就可能需要线程来实现了。
分享到:
相关推荐
- **`android:excludeFromRecents`**:如果设置为 `true`,则此Activity不会出现在最近使用的列表中。 - **`android:exported`**:设置为 `true` 表示其他应用可以启动该Activity,通常用于接收Intent的Activity需要...
在Android中,可以使用SwipeRefreshLayout包裹列表视图(如RecyclerView或ListView),实现上滑刷新数据的功能。同时,结合EndlessRecyclerViewScrollListener,可以在用户滚动到底部时自动加载更多内容。 对于**...
在培训中,我还接触到了Android的异步处理,如AsyncTask和Handler/Looper机制,这些对于优化用户体验、避免主线程阻塞起到了重要作用。此外,Android的权限管理、多进程通信、服务和广播接收器等内容,让我对Android...
8. **多线程与AsyncTask**:讨论Android中的并发编程,包括线程池、Handler、Looper、Message以及AsyncTask的使用,提升应用的性能和用户体验。 9. **SQLite数据库**:介绍如何在Android中集成SQLite数据库,进行...
这些源码可能涵盖了不同的功能模块,如用户界面(UI)设计、数据存储(SQLite或SharedPreferences)、网络通信(如使用Retrofit或Volley库)、多线程处理(AsyncTask或Handler)、以及服务(Service)和广播接收器...
最后,书中很可能会介绍Android的性能优化技巧,如内存管理、UI优化、代码混淆等,以及如何使用Android Profiler进行性能分析和调试。 源码部分则提供了实际操作的机会,读者可以通过阅读和运行这些代码,直观感受...
在Android开发中,加载动画效果是提升用户体验的重要一环,特别是在数据加载、网络请求或界面切换时,良好的加载动画能够使用户在等待过程中感受到趣味性和专业性。本资源包"android 各种加载动画效果"提供了多种...
Android中利用画图类和线程画出闪烁的心形,送给亲爱的他 android自带的示例程序 BluetoothChat 变蓝牙串口助手(内含DIY蓝牙遥控车附源码实例教程) Android高手过招 FAQ 网友收集的android开发书籍(可下载哦)...
- 为了保证界面流畅,搜索请求通常在后台线程中执行,比如使用`AsyncTask`或`Thread`,然后通过回调将结果传递到主线程更新UI。 - 如果搜索结果来自网络,那么还需要用到网络请求库,如`Retrofit`或`Volley`,以及...
在客户端,开发者使用了AsyncTask或者Retrofit等网络请求框架,进行异步加载,保证了用户在浏览诗词时的流畅性,避免了因网络延迟导致的卡顿现象。 对于学习者来说,这个项目提供了一个很好的实践平台。学生可以...
2. **UI组件**:项目中可能会使用到Android的各种视图组件,如TextView、ImageView、RecyclerView等,以及自定义View的实现,用于创建独特的用户界面。 3. **网络请求**:客户端通常需要与服务器进行数据交互,可能...
在Android中,我们可以使用自定义视图(Custom View)来实现这样的功能。自定义视图允许开发者扩展系统提供的基础组件,添加额外的功能或改变其外观。对于"按钮内带进度条",我们需要创建一个继承自`AppCompatButton...
这些代码可以帮助你理解特定功能的实现,如Intent的使用、SQLite数据库操作、异步任务处理(AsyncTask)、或者是Android的新特性,如Kotlin语言的支持、Jetpack组件库的应用等。通过实际动手操作,你可以快速提升...
在Android开发中,UI(用户界面)是至关重要的组成部分,它直接影响到用户的使用感受和应用程序的流行程度。源码分析可以从以下几个关键知识点入手: 1. **布局设计**:Android中通常使用XML文件来定义布局,如`...
本篇文章将对Android中的对话框进行深入的总结,包括基本概念、类型、使用方法以及自定义对话框的实现。 首先,Android提供了三种基本类型的对话框: 1. AlertDialog:这是最常用的对话框类型,通常包含标题、消息...
1. **UI设计**:项目中的布局设计使用了Android的XML布局文件,包括LinearLayout、RelativeLayout、GridLayout以及RecyclerView等,展示了如何构建响应式和用户友好的界面。 2. **网络通信**:应用可能使用了`...
5. **多线程与并发**:Android中的线程模型,如主线程(UI线程)、Handler、Looper、Message,以及IntentService、AsyncTask、Thread Pool等并发解决方案。 6. **权限管理**:随着Android版本的升级,权限管理变得...
这篇笔记是关于Android开发的个人珍贵经验与心得总结,涵盖了从基础知识到高级技巧的全方位内容。在Android开发的世界里,无论是初学者还是资深开发者,都能从中找到有价值的信息。 一、Android系统架构 Android...
Android(安卓) Android基础知识 Android内存泄漏总结 Handler内存泄漏分析及解决 Handler、Looper、Message、MessageQueue基础流程分析 ...Android ORM 框架之 greenDAO 使用心得 Data Binding(数据绑定)用户指南
在Android中,我们可以使用OpenGL ES(OpenGL for Embedded Systems)来创建和渲染复杂的图形。OpenGL ES是一个基于OpenGL标准的轻量级图形库,特别适合移动设备。开发者可以使用Java绑定或者原生C/C++代码来实现。 ...