Android AsyncTask(异步) 操作使用
1、Main类
public class Main extends Activity {
private Button buttonNet;
private Button buttonPrint;
private TextView textView;
private ProgressBar progressBar;
ProgressAsync progressAsync;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
buttonNet = (Button)findViewById(R.id.buttonNet);
buttonPrint = (Button)findViewById(R.id.buttonPrint);
textView = (TextView)findViewById(R.id.textView);
progressBar = (ProgressBar)findViewById(R.id.progress_horizontal);
buttonNet.setOnClickListener(btnNet);
buttonPrint.setOnClickListener(btnPrint);
}
/**
* 用户离开屏幕,取消异步任务
*/
@Override
protected void onPause() {
if (progressAsync != null && progressAsync.getStatus() != AsyncTask.Status.FINISHED) {
progressAsync.cancel(true);
}
}
private OnClickListener btnNet = new OnClickListener() {
@Override
public void onClick(View v) {
/*NetOpertor opertor = new NetOpertor();
opertor.operate();*/
progressAsync = new ProgressAsync(textView,progressBar);
progressAsync.execute(1000);
}
};
private OnClickListener btnPrint = new OnClickListener() {
int i = 1;
@Override
public void onClick(View v) {
textView.setText("输出信息===="+i++);
}
};
}
2、NetOpertor类
/**
* 线程控制
* @author XP
*
*/
public class NetOpertor {
public void operate(){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
3、ProgressAsync执行异步操作
/**
* 执行异步操作
* @author XP
*
*/
public class ProgressAsync extends AsyncTask<Integer, Integer, String> {
private TextView view;
private ProgressBar progressBar;
public ProgressAsync(TextView view,ProgressBar progressBar) {
this.view = view;
this.progressBar = progressBar;
}
//第二步 在后台运行,所有的实际工作都是在其中完成的
@Override
protected String doInBackground(Integer... params) {
NetOpertor opertor = new NetOpertor();
for (int i = 10; i <= 100; i+=10) {
opertor.operate();
//调用第三步
publishProgress(i);
}
return "执行完毕";
}
//第1步 在后台处理开始前,这个方法在UI线程中运行,可显示进度指示器
@Override
protected void onPreExecute() {
view.setText("开始执行异步操作......");
}
//第四步 后台处理结束时,这个方法在UI线程中运行
@Override
protected void onPostExecute(String result) {
view.setText(result);
}
//第三步 每当doInBackground调用publishProgress时,都会在UI线程中运行这个方法,它接收后台处理提供的信息,可使用它更新用户看到的ProgressBar控件
@Override
protected void onProgressUpdate(Integer... values) {
progressBar.setProgress(values[0]);
}
}
相关推荐
可以使用AsyncTask或其他异步处理机制(如Handler、Runnable、Thread或ExecutorService)来执行这些操作,保证用户体验的流畅性。 5. **网络上传** 图片上传通常涉及HTTP或HTTPS请求,可以使用HttpURLConnection或...
6. **异步操作**: 由于数据库操作可能涉及较耗时的操作,因此在Android中通常会使用AsyncTask或者LiveData等工具来实现后台线程处理,避免阻塞主线程,保证用户界面的流畅性。 7. **Activity和Fragment**: CRUD操作...
通过这种方式,初学者不仅可以学习到基础控件的使用,还能掌握更高级的主题,如异步任务(AsyncTask)、服务(Service)、权限管理、网络请求等。此外,源码分析还能帮助我们学习良好的编程习惯和设计模式,如MVP或MVVM...
4. **异步处理与线程**:Android主线程不能执行耗时操作,因此需使用AsyncTask、Handler、Thread或Lambda表达式来处理后台任务。理解线程间的通信和生命周期管理,可以避免应用卡顿和崩溃。 5. **多媒体处理**:...
在Android中,由于主线程不能进行耗时操作,所以通常会用到AsyncTask或Handler/Looper机制来在后台线程处理数据,并在UI线程上更新界面。 2. **UI-LinearLayout**: LinearLayout是Android中最基础的布局管理器之...
8. **异步处理**:如果图片加载或数据处理可能耗时,开发者可能使用AsyncTask或LiveData来确保这些操作不会阻塞主线程,从而保证应用的流畅性。 9. **测试和调试**:Android Studio提供了丰富的测试框架如JUnit和 ...
Ch07 - 并行与多线程:此章节探讨了如何在Android上进行异步操作,如使用AsyncTask,Handler,Loader,以及线程池。这些代码示例有助于优化应用程序性能,避免阻塞主线程。 Ch08 - 动画与过渡效果:这部分代码展示...
书中可能会包含异步任务、AsyncTask或使用现代的协程来处理网络请求的实例。 5. **多媒体处理**:Android支持音频、视频的播放和录制,以及图像的加载和编辑。源码示例可能包含如何使用MediaPlayer、ExoPlayer、...
7. **异步处理**:由于主线程(UI线程)不能进行耗时操作,样例程序可能会演示如何使用AsyncTask、Handler、Thread、Runnable或现代的Coroutines来处理后台任务,避免阻塞用户界面。 8. **网络通信**:Android应用...
10. **多线程与异步任务处理**:为了避免阻塞主线程,Android应用需要利用多线程进行耗时操作。本书将涉及AsyncTask、Handler、Thread以及最新的Kotlin协程等技术。 11. **动画与图形**:为了让应用更加吸引用户,...
下面将详细讲解这个“Android应用源码之拍照上传代码样例”所涵盖的关键知识点。 1. **Android权限管理**: 在Android中,访问相机和存储空间都需要申请相应的权限。在Android 6.0(API级别23)及更高版本,需要在...
1. 创建一个线程池或使用Android的AsyncTask,避免在主线程中执行耗时操作。 2. 在工作线程中下载或从本地缓存中获取图片。 3. 使用内存缓存和/或磁盘缓存策略,减少网络请求,提高加载速度。 4. 当图片加载完成后,...
12. **测试样例**:TestSQL可能包含了一个简单的Android应用,用于展示如何建立连接、执行查询、插入数据等基本操作。分析这个样例代码可以帮助理解整个流程。 以上是关于"Android直连SQLServer"的主要知识点,实际...
8. **异步处理**:Android中的异步编程,如AsyncTask、IntentService、Handler/Looper机制,是避免阻塞主线程的关键。源代码会展示如何在后台线程执行耗时任务。 9. **Android组件**:可能还会涉及到...
源码可能包含各种通知样例,如简单的文本通知、带动作的通知以及使用通知渠道的示例。 6. **权限管理(Permissions)**:Android 2.x时代的权限管理可能涉及到动态请求权限的模式,源码中可能包含在运行时请求权限...
8. **异步处理**:Android主线程不适宜执行耗时操作,因此通常使用AsyncTask、IntentService或现代的Coroutines进行后台任务处理,避免UI卡顿。 9. **权限管理**:Android 6.0及以上版本引入运行时权限,应用在使用...
可以使用Java的`AsyncTask`或者`Handler`机制来实现异步操作。 6. **异常处理**:在C/C++代码中,需要捕获并适当地处理错误,然后通过JNI接口返回给Java层,以便Java代码能正确处理异常情况。 7. **测试与调试**:...
4. **多线程与并发**:在Android开发中,后台任务处理是必不可少的,源码中可能会有异步处理、线程池和AsyncTask的实现,帮助你理解如何在Android环境中正确处理并发问题。 5. **数据库操作**:如果项目涉及本地...
7. **异步处理**:Android提供了AsyncTask、Handler、Runnable等机制来处理非UI线程任务,防止阻塞主线程。项目可能包含这些异步处理技术的实例。 8. **动画与图形**:ApiDemo可能包括基本的视图动画、属性动画,...