rei*_*ley 56 android android-handler android-thread
我想知道我handler.post(runnable);
应该何时使用,何时使用
new Thread(runnable).start();
在Handler的开发人员文档中提到:
导致Runnable r添加到消息队列中.runnable将在连接此处理程序的线程上运行.
这是否意味着,如果我写onCreate()
的Activity
类:
Handler handler = new Handler();
handler.post(runnable);
Run Code Online (Sandbox Code Playgroud)
然后runnable将在一个单独的线程或Activity的线程中调用?
kam*_*uel 84
您应该Handler.post()
在想要在UI线程中执行操作时使用.
所以,让我们说回调(在单独的线程中运行)你想要改变一个TextView
文本,你应该使用Handler.post()
.
在Android中,与许多其他UI框架一样,UI元素(窗口小部件)只能从主线程修改.
编辑:长时间运行任务的示例
mHandler = new Handler();
new Thread(new Runnable() {
@Override
public void run () {
// Perform long-running task here
// (like audio buffering).
// you may want to update some progress
// bar every second, so use handler:
mHandler.post(new Runnable() {
@Override
public void run () {
// make operation on UI - on example
// on progress bar.
}
});
}
}).start();
Run Code Online (Sandbox Code Playgroud)
当然,如果您要执行的任务非常长并且用户可能在此期间切换到其他应用程序的风险,则应考虑使用服务.
par*_*oel 26
为了回答你的具体问题:
这是否意味着如果在我写的onCreate of Activity类中:
处理程序处理程序= new Handler()hanlder.post(runnable); 那么,runnable将在一个单独的线程中调用还是在Activity的线程上调用?
不,它不会.Runnable将在主线程本身上调用.Handler仅用于将消息发布到它所附加的线程(创建它的位置).它不会自己创建一个线程.在您的示例中,您在主Thread(调用Activity.OnCreate()的位置)中创建了一个Handler,因此在此类Handler上发布的任何消息都将仅在主线程上运行.
wor*_*ked 12
举例:
mHandler = new Handler();
new Thread(new Runnable(){
@Override
public void run () {
mHandler.post(new Runnable() {
@Override
public void run () {
mUiView.setX(x);
}
});
}
}).start();
Run Code Online (Sandbox Code Playgroud)
或者,您可以跳过处理程序并直接在视图上使用post方法:
new Thread(new Runnable(){
@Override
public void run () {
mUiView.post(new Runnable() {
@Override
public void run () {
mUiView.setX(x);
}
});
}
}).start();
Run Code Online (Sandbox Code Playgroud)
这是一个很好的帖子,概述了差异:post方法究竟做了什么?
归档时间: |
|
查看次数: |
68951 次 |
最近记录: |