Kho*_*yar 22 multithreading android handler
有人可以告诉我Thread和Handler之间的差异吗?当我们使用Thread并使用Handler时?
我的项目中有两个代码,但我无法理解它们.
final Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
// Do SomeThings
}
};
Run Code Online (Sandbox Code Playgroud)
和
private class readThread extends Thread
{
Handler mHandler;
readThread(Handler h){
mHandler = h;
this.setPriority(Thread.MIN_PRIORITY);
}
@Override
public void run()
{
// Do SomeThings
}
}
Run Code Online (Sandbox Code Playgroud)
在另一个方法中调用这样的处理程序
read_thread = new readThread(handler);
read_thread.start();
Run Code Online (Sandbox Code Playgroud)
哪一个先跑?有人可以解释一下吗?
yjz*_*ang 51
相同:您可以异步执行任务而不会阻止当前代码,
区别:想象一下,你有一个Runnable r = new Runnable{...}
使用时new Thread(r).start(),实际上是创建了一个新线程并异步运行任务.
使用 new Handler().post(r)(或Message)时,您将Runnable对象添加到Looper稍后的同一个线程中并执行代码.
A Thread,一般MainThread或UIThread包含一个Looper.当MainThread运行时,它会循环的Looper,并执行Runnable一个接一个.
当首选Thread时:
当您正在进行大量工作(如网络通信)或解码大型位图文件时,首选新线程.如果需要很多线程,可能ExecutorService会更进一步.
https://developer.android.com/reference/java/util/concurrent/ExecutorService.html
当Handler是首选时:
当您想要TextView从其他线程更新UI对象(如文本)时,UI对象必须只能在UI线程中更新.此外,当您只想稍后运行一些轻量代码(如延迟300毫秒)时,您可以使用Handler它,因为它更轻,更快.
另请参阅Handler vs AsyncTask vs Thread
线程是通用处理任务,可以完成大多数事情,但它们不能做的一件事是更新 UI。
另一方面,处理程序是后台线程,允许您与 UI 线程通信(更新 UI)。
例如,通过发布到处理程序的消息(可运行)显示吐司或更新进度条,但如果将此可运行作为线程启动,则不能。
通过处理程序,您还可以进行消息队列、调度和重复等操作。
我还没有遇到过在 android 中需要线程的情况。
我主要使用 AsyncTasks 和 Handlers 的组合。
上述任务的处理程序。
用于下载/数据获取和轮询等的异步任务。
Thread 实际上创建新线程 - 相对于当前线程在后台运行的作业的一部分。
Handler本身不为后台作业提供任何机制——它只是一个访问Looper与某个线程相关联的消息队列 ( )的工具。UI 线程Looper默认已附加,因此通常的做法是更新 UI,Handler.post(Runable)这意味着在与 this 关联的线程上执行一些代码Handler。
一旦Handler服务Looper,就不能在没有关联的线程中创建它Looper。
| 归档时间: |
|
| 查看次数: |
17994 次 |
| 最近记录: |