赞
踩
这个课程向你展示如何实现一个Runnalbe类,它在一个单独的线程中运行它的Runnable.run()方法中的代码。你也能传递一个Runnable给其它的对象,然后将它连接到一个线程并且运行它。一个或者多个执行一个特殊操作的Runnable对象在某些时候被称之为一个任务。
Thread和Runnabl都是基础类,凭借它们自己,只有有限的能力。相反,它们是强大的Android类的基础,如HandlerThread,AsyncTask,和IntentService.Thread和Runnable也是ThreadPollExecutor类的基础。这节类自动管理线程和任务队列,也可以并行运行多个线程。
————————————————————————————————————————————————————————————————
实现一个实现了Runnalbe的类是简单的。例如:
- public class PhotoDecodeRunnable implements Runnable {
- ...
- @Override
- public void run() {
- /*
- * Code you want to run on the thread goes here
- */
- ...
- }
- ...
- }
实现run()方法
————————————————————————————————————————————————————————————————
在这个类中,Runnable.run()方法包含被执行的代码。通常,任何事情都被允许在一个Runnable中。记住,这个Runnable没有运行在这个UI线程中,所以它不能直接修改UI线程对象,如View对象。为了和UI线程通信,你必须使用在Communicate with the UIThread课程中被描述的技术。
在run()方法的开始,通过使用THREAD_PRIORITY_BACKGROUND调用Process.setThreadPriority()方法来设置线程使用的后台优先级。这个方式降低了在Runnable对象的线程和UI线程之间的资源竞争。
你也应该在这个Runnable自己中保存一个Runnable对象的线程的引用,通过调用Thead.currentThread()方法。
下面的代码片段展示了如何设置这个run()方法:
- class PhotoDecodeRunnable implements Runnable {
- ...
- /*
- * Defines the code to run for this task.
- */
- @Override
- public void run() {
- // Moves the current Thread into the background
- android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
- ...
- /*
- * Stores the current Thread in the the PhotoTask instance,
- * so that the instance
- * can interrupt the Thread.
- */
- mPhotoTask.setImageDecodeThread(Thread.currentThread());
- ...
- }
- ...
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。