没有线程的Android睡眠

时间:2016-03-02 09:07:40

标签: android multithreading sleep

如何在没有线程/ runnable的情况下使代码进入睡眠状态。我需要修改Android应用程序中的布局,操作方法并再次反转布局更改。然而,这个方法包含计数器,每当我有一个内部类,比如一个可运行的timertask或类似的变量需要是最终的,但是我不能增加计数器。

ChangeLayout();

int round = 0;
while (isPlaying && round < 24){
    round++;
    int specificOccurrence = 0;
    while (isPlaying && specificOccurence < 8) {
        if (somethingSpecific){
            specificOccurence++;
        }
        // operates this while somehow with a 1 second break;
        // after that just continue.
        waitASecondSomehow();
    }
}

ReverseLayoutChanges();

3 个答案:

答案 0 :(得分:2)

使用处理程序使用postDelayed计划主线程的工作:

Handler h = new Handler();
h.postDelayed(runnable, delayInMillis);

上面的runnable是一个Runnable实例,它执行您想在主线程上执行的操作。继续在每个时间间隔发布它,也许在runnable本身内重复,以安排下一次迭代。

答案 1 :(得分:1)

您应该使用Timer

    Timer mUiUpdateTimer;
    TimerTask uiUpdateTask; 
    int mistakes=0;
    int periodTime=1000;
    private void createTimeHandler()
    {

        mUiUpdateTimer = new Timer();

        final Handler uiUpdateHandler = new Handler();

        final Runnable uiUpdateRunnable = new Runnable() {

            @Override
            public void run() {
                   // other jobs
                    mistakes++;
            }
        };

        uiUpdateTask = new TimerTask() {

            @Override
            public void run() {
                //for safe UI handling 
                uiUpdateHandler.post(uiUpdateRunnable);

            }
        };

        mUiUpdateTimer.scheduleAtFixedRate(uiUpdateTask, 0, periodTime);


    }

答案 2 :(得分:0)

在try块中添加下面的处理程序

new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                mistakes++; 
                }
            }

        }, 3000);