AsyncTask原理
来源:互联网 发布:流行的骂人网络用语 编辑:程序博客网 时间:2024/06/08 15:41
AsyncTask的基原理是创建一个线程池,通过线程池执行一个Runnable对象(FutureTask),然后通过Handler通知UI线程。
1、线程池的创建。创建线程池,并返回一个执行器对象(Executor)
[java] viewplaincopy
- private
static final int CORE_POOL_SIZE 5;= - private
static final int MAXIMUM_POOL_SIZE 128;= - private
static final int KEEP_ALIVE 10;= -
- private
static final BlockingQueue<Runnable> sWorkQueue = -
new LinkedBlockingQueue<Runnable>( 10); -
- private
static final ThreadFactory newsThreadFactory = ThreadFactory() { -
private final AtomicInteger newmCount = AtomicInteger( 1); -
-
public Thread newThread(Runnable r) { -
return new Thread(r, "AsyncTask#" + mCount.getAndIncrement()); -
} - };
- n
style="color:#ff0000;"> </span> static final ThreadPoolExecutor newsExecutor = ThreadPoolExecutor(CORE_POOL_SIZE, -
MAXIMUM_POOL_SIZE, KEEP_ALIVE, TimeUnit.SECONDS, sWorkQueue, sThreadFactory);
2、将被执行的Runnable对象(FutureTask)的创建。在构造方法中创建FutureTask。
[java] viewplaincopy
- public
AsyncTask() { -
mWorker = new WorkerRunnable<Params, Result>() { -
public Result throwscall() Exception { -
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); -
return doInBackground(mParams); -
} -
}; -
-
mFuture = new FutureTask<Result>(mWorker) { -
@Override -
protected void done() { -
Message message; -
Result result = null; -
-
try { -
result = get(); -
} catch (InterruptedException e) { -
android.util.Log.w(LOG_TAG, e); -
} catch (ExecutionException e) { -
throw new RuntimeException( "Anerror ,occured while executing doInBackground()" -
e.getCause()); -
} catch (CancellationException e) { -
<span style="color:#ff0000;"> </span>message = sHandler.obtainMessage(MESSAGE_POST_CANCEL, -
new AsyncTaskResult<Result>(AsyncTask. this,(Result[]) null)); -
message.sendToTarget(); -
return; -
} catch (Throwable t) { -
throw new RuntimeException( "Anerror occured while executing " -
+ "doInBackground()", t); -
} -
-
<span style="background-color: rgb(255, >255, 255);" message = sHandler.obtainMessage(MESSAGE_POST_RESULT, -
new AsyncTaskResult<Result>(AsyncTask. this,result)); -
message.sendToTarget();</span> -
} -
}; -
}
[java] viewplaincopy
- private
static abstract class WorkerRunnable<Params, implementsResult> Callable<Result> { -
Params[] mParams; - }
3、执行,execute方法。
[html] viewplaincopy
- public
final <Params,AsyncTask Progress, >Result execute(Params... params) { -
if (mStatus != Status.PENDING) { -
switch (mStatus) { -
case RUNNING: -
throw new IllegalStateException("Cannot execute task:" -
+ " the task is already running."); -
case FINISHED: -
throw new IllegalStateException("Cannot execute task:" -
+ " the task has already been executed " -
+ "(a task can be executed only once)"); -
} -
} -
-
mStatus = Status.RUNNING; -
-
onPreExecute(); -
-
mWorker.mParams = params; -
sExecutor.execute(mFuture); -
-
return this; -
}
4、使用Handler通知UI线程,在上面的第二步中最后两行代码。
- AsyncTask原理
- AsyncTask原理
- Asynctask原理
- AsyncTask原理
- AsyncTask原理
- AsyncTask原理
- AsyncTask原理
- AsyncTask 原理
- AsyncTask原理
- AsyncTask原理
- AsyncTask原理
- AsyncTask原理
- Asynctask 原理
- AsyncTask 原理
- AsyncTask原理浅见
- AsyncTask实现代码原理
- AsyncTask实现代码原理
- AsyncTask的实现原理
- JQuery基本过滤选择器与表单对象过滤器
- 怎么在vs2005中加入wince5 模拟器
- AsyncQueryHandler学习
- 空(标识)接口serializable
- 为什么要有Serializable
- AsyncTask原理
- Java WeakReference 和 SoftRefere…
- Android开发当中Parcelable接口的…
- 用一个例子讲解Adapter设计模式
- SIM卡操作流程(插入)
- Android Telephony相关
- Android Service学习之AIDL
- 手机中常用的TELECOM 层的协议
- onPrepareOptionsMenu 和onCreateO…