界面是Activity,如果把耗时的工作线程放在Activity的界面线程中做,那势必阻塞显示线程,开更多的线程也不合适,所以Android提供了AsyncTask线程来专门处理此事。
定义方法
class SoftCertHttpTask extends AsyncTask {
@Override
protected Object doInBackground(Object... params) {
// TODO Auto-generated method stub
try{
}catch(Exception e){
toast.setText("错误:"+e.getMessage());
toast.show();
}
return null;
}
@Override
protected void onPreExecute() {
// 任务启动,可以在这里显示一个对话框,这里简单处理
toast.setText("开始了!");
}
}
使用方法:
loginBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//Toast用于向用户显示提示信息
toast = Toast.makeText(SoftCertUserLogin.this, "null", Toast.LENGTH_SHORT);
toast.setMargin(0.8f, 0.8f);
toast.setText("正在登录,请稍候");
toast.show();
SoftCertHttpTask ht=new SoftCertHttpTask();
ht.execute();
}});
需要说明,特地从android官网将标准AsyncTask贴于此处:
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
使用方法:
new DownloadFilesTask().execute(url1, url2, url3);
URL是参数类型,Long是执行函数的返回值在onPostExecute中处理,Integer是执行进度,在onProgressUpdate使用,以上函数若没有定义的变量则实效,onPreExecute是开始函数,无论定义参数与否都将执行。
分享到:
相关推荐
本篇将详细讲解如何在Android中使用AsyncTask实现多线程计数,并展示如何将计数结果显示到UI。 首先,我们需要理解Android的线程模型。Android应用的主要工作线程是主线程,也称为UI线程。这个线程负责绘制和交互UI...
2. **doInBackground()**:这个方法是异步执行的,它在后台线程中运行,可以执行耗时操作,如网络请求、数据库操作等。这个方法接收一个泛型参数,用于传递输入数据,并返回一个泛型结果。由于它在后台线程中运行,...
- **创建和执行**:Task的实例必须在UI线程中创建,`execute`方法也必须在UI线程中调用,否则可能导致运行时错误。 - **生命周期**:一个AsyncTask实例只能执行一次,多次调用`execute`会导致异常。如果需要多次执行...
在Android中使用AsyncTask和Handler线程间交互的方式,详情参见博客:http://www.cnblogs.com/plokmju/p/android_AsyncTask.html和http://www.cnblogs.com/plokmju/p/android_Handler.html
params)`:在后台线程中执行,不直接与UI交互,适合进行耗时操作。 3. `onPostExecute(Result result)`:在后台任务完成后,在主线程中执行,可以安全地更新UI并显示结果。 在这个"Android 线程AsyncTask逐步在...
本资料包主要讲解了如何使用`AsyncTask`进行异步加载图片,这对于在UI线程中保持流畅用户体验至关重要。 `AsyncTask`是Android SDK中的一个类,它为开发者提供了简单的多线程和回调功能。它的核心思想是将长时间...
- **生命周期问题**:如果在Activity中使用AsyncTask,但Activity被销毁(如屏幕旋转),AsyncTask可能会继续执行,导致错误的结果。可以考虑在Activity的`onSaveInstanceState()`保存AsyncTask的状态,或在`...
为了防止UI阻塞,开发者需要在其他线程中执行耗时操作。主要有以下几种线程模型: - **Worker Thread**:开发者自定义的工作线程,用于处理耗时任务。 - **Intent Service**:为一次性后台任务设计,当任务完成后...
Android Asynctask 先小试牛刀,了解一下各个方法执行过程,关注博客http://himici.com/
在Android中实现异步任务机制有两种方式,Handler和AsyncTask。 Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,...
本文将详细探讨如何在Android中使用`AsyncTask`来异步更新UI界面。 ### 一、AsyncTask概述 `AsyncTask`是Android SDK提供的一种轻量级的异步任务处理类,它简化了在后台线程中执行任务并在UI线程中更新结果的过程...
- `onPreExecute()`:在UI线程中执行,通常用于显示进度条或者初始化操作。 - `doInBackground(Params... params)`:在后台线程中运行,执行耗时操作。此方法中不能直接修改UI,可以调用`publishProgress(Progress...
AsyncTask的使用和内部机制对于任何Android开发者来说都至关重要。让我们深入探讨这个话题。 首先,Android系统为了解决长时间运行的任务在主线程执行导致的UI冻结问题,提供了AsyncTask。AsyncTask分为三个基本...
2. **doInBackground(Params...)**:在后台线程中执行,执行耗时的操作,不直接更新 UI。此方法可以调用 `publishProgress(Progress...)` 来通知主线程更新进度。 3. **onProgressUpdate(Progress...)**:在主线程...
AsyncTask 有四个主要的方法,每个方法都在特定的线程中运行: 1. **onPreExecute()**:在 UI 线程中运行,通常用于任务开始前的准备工作,如显示加载对话框。 2. **doInBackground(Params... params)**:在后台...
通过以上对 AsyncTask 的源码解析和使用方法的介绍,你应该对如何在 Android 应用中高效地使用异步任务有了更深入的理解。在实际开发中,正确理解和使用 AsyncTask 可以帮助我们编写出更加流畅、响应快速的应用程序...
- AsyncTask 必须在 UI 线程中创建实例,并且必须在 UI 线程中调用 `execute(Params...)` 方法。 - 不应该手动调用 `onPreExecute()`, `onPostExecute(Result)`, `doInBackground(Params...)`, `onProgressUpdate...
3. **onProgressUpdate(Progress...)**:在UI线程中回调,用于更新进度信息,例如更新进度条。 4. **onPostExecute(Result)**:在后台任务完成后,由UI线程调用,将结果传递回主线程,适合更新UI。 使用AsyncTask时...