Android中处理程序中的某些逻辑错误

时间:2017-09-29 07:24:01

标签: java android multithreading android-handler postdelayed

我是android的初学者。

我想要的是什么: 在这里,我试图实现该子处理程序应该调用主处理程序的每秒10次。那个主处理程序应该持续到20秒。

问题: 检查我\我已经使用了日志,但它不起作用。它进入子处理程序有时8次或有时9或10次。 是否有任何逻辑错误或是否有其他更好的方法来实现这一目标? 谢谢。

我的代码:

int i=0;
int cont;
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        i++;
        cont = 1;
        Log.e("main count", i + "");
        final Handler handler1 = new Handler();
        handler1.postDelayed(new Runnable() {
            @Override
            public void run() {
                if (cont <= 10) {
                    Log.e("sub count ", cont + "");
                    cont++;
                    handler1.postDelayed(this, 100);
                }
            }
        }, 100);
        if (!(i == 20)) {
            handler.postDelayed(this, 1000);
        }
    }
}, 1000);

1 个答案:

答案 0 :(得分:0)

使用Handler执行具有精确计时的代码很困难,因为您必须自己测量时间。 使用内置类(如ScheduledThreadPoolExecutorTimer)要容易得多。我推荐第一个,因为它需要对代码进行较少的更改。您应该根据您的要求选择scheduleAtFixedRate()或scheduleWithFixedDelay()方法之一。

_notificationService.Value().Value.... etc

您还可以使用单个ScheduledFuture,并在每次执行10次子计数代码后执行主计数代码。