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的多线程是一个很好的开始。