Java Handler.postDelayed v/s Runnable.run。可以打电话给.跑步而不是.邮寄吗?
我试图实现一个循环Java Handler.postDelayed v/s Runnable.run。可以打电话给.跑步而不是.邮寄吗?,java,android,multithreading,runnable,android-handler,Java,Android,Multithreading,Runnable,Android Handler,我试图实现一个循环Runnable。我发现的示例似乎使用以下想法启动runnable handler = new Handler(); final Runnable r = new Runnable() { public void run() { handler.postDelayed(this, 10000); doIt(); count ++
Runnable
。我发现的示例似乎使用以下想法启动runnable
handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
handler.postDelayed(this, 10000);
doIt();
count ++;
}
};
r.run();// what I prefer
// handler.postDelayed(r, 1000);//their idea
我更喜欢使用对run()
方法的调用来启动Runnable
。如果直接调用run()
,我可能会遇到什么麻烦呢
谢谢!:)
我更喜欢使用对run()方法的调用来启动Runnable
嗯
如果直接调用run(),我可能会遇到什么麻烦呢
第一次通过run()
将立即发生,而不是您注释掉的代码,这将导致第一次通过run()
从现在开始大约1000毫秒
但是,我会转储处理程序
postDelayed()
也是View
上的一种方法,所以只需在UI中使用一些小部件即可
我更喜欢使用对run()方法的调用来启动Runnable
嗯
如果直接调用run(),我可能会遇到什么麻烦呢
第一次通过run()
将立即发生,而不是您注释掉的代码,这将导致第一次通过run()
从现在开始大约1000毫秒
但是,我会转储
处理程序
postDelayed()
也是View
上的一个方法,所以只需在UI中使用一些小部件。如果调用r.run()
,则Runnable
将立即执行。但是如果调用handler.postDelayed(r,1000)代码>按照他们的建议,Runnable
将在1s之后才会执行。这是第一点。第二,为什么不使用Android
提供的Thread-Loop-merchanism
,即Handler
AsyncTask
HandlerThread
,因为Android
非常支持它?如果调用r.run()
,那么runable
将立即执行。但是如果调用handler.postDelayed(r,1000)代码>按照他们的建议,Runnable
将在1s之后才会执行。这是第一点。第二,为什么不使用Android
提供的Thread-Loop-merchanism
,即Handler
AsyncTask
HandlerThread
,以便Android
非常支持它?您希望它现在运行还是在1000毫秒内运行?处理程序有什么问题?为什么你不喜欢它们,它们解决了很多你用run会遇到的问题。@immibis我不确定postDelayed是否会做一些事情,而不仅仅是将它延迟后放到队列中。看起来没什么别的了。@BojanKseneman只是不舒服而已。你能再详细一点吗?:)好吧,它本身就可以运行,它相当愚蠢。当您试图通知它一些事情,中断它,取消它,从另一个线程向它传递一些数据时,您会发现它缺乏功能。如果您知道如何正确使用,Handler会为您处理这些案例。我建议你更多地了解它,你可能会开始喜欢它,避免流氓。最重要的是它是线程安全的,它允许线程之间的通信!您希望它现在运行还是在1000毫秒内运行?处理程序有什么问题?为什么你不喜欢它们,它们解决了很多你用run会遇到的问题。@immibis我不确定postDelayed是否会做一些事情,而不仅仅是将它延迟后放到队列中。看起来没什么别的了。@BojanKseneman只是不舒服而已。你能再详细一点吗?:)好吧,它本身就可以运行,它相当愚蠢。当您试图通知它一些事情,中断它,取消它,从另一个线程向它传递一些数据时,您会发现它缺乏功能。如果您知道如何正确使用,Handler会为您处理这些案例。我建议你更多地了解它,你可能会开始喜欢它,避免流氓。最重要的是它是线程安全的,它允许线程之间的通信!谢谢!:)此外,此代码也是服务的一部分。因此,我必须使用处理程序,不能使用UI小部件。是吗?。@Harsh:如果这是服务的一部分,您应该使用标准Java中的ScheduledExecutorService
,或者TimerTask
。您特别希望该服务定期在后台线程上获得控制权,而这些线程为您提供了控制权。谢谢!:)此外,此代码也是服务的一部分。因此,我必须使用处理程序,不能使用UI小部件。是吗?。@Harsh:如果这是服务的一部分,您应该使用标准Java中的ScheduledExecutorService
,或者TimerTask
。您特别希望该服务在后台线程上定期获得控制权,而这些线程为您提供了控制权。谢谢!也很抱歉,无法向上投票!是的,我还需要进一步研究不同的线程机制。直到现在才真正需要使用它们。你知道我可以在哪些资源上抢先一步吗?@Harsh我认为android doc的多线程是一个很好的开始。谢谢!也很抱歉,无法向上投票!是的,我还需要进一步研究不同的线程机制。直到现在才真正需要使用它们。你知道我可以在哪些资源上抢先一步吗?@Harsh我认为android doc的多线程是一个很好的开始。