1

我想每秒钟更新一次活动中的变量,为此我正在使用异步任务和其中的可运行文件。我不断收到此错误消息“无法在以不同方法定义的内部类中引用非最终变量 myRunnable”。当我将声明更改为 final 时,它显示“局部变量 myRunnable 可能尚未初始化”。我该如何纠正错误?有没有更好的方法来做我想做的事?

    import android.os.AsyncTask;
    import android.os.Handler;

    public class Timer extends AsyncTask<String, Process, Void>{
static int seconds=0;
TimerTask timer;
static int minutes=0;
static int hours=0;
private String timeTaken;
public Handler myhandler = new Handler();

@Override
protected Void doInBackground(String... params) {

   final Runnable myRunnable = new Runnable() {

@Override
public void run() {
    ......
......
    ...... 
myhandler.postDelayed(myRunnable, 1000);
}
};

    return null;
}   
4

1 回答 1

0

像这样的东西而不是使用 AsyncTask 怎么样(尽管可以在 AsyncTask 中完成类似的事情,并且因为它在另一个线程中运行,我可以简单地使用 Thread.sleep(...) 阻止这个工作线程而不是执行整个 Runnable事物...

private myhandler = new Handler();
private boolean periodicCallsEnabled=false;

public boolean isPeriodicUpdatingEnabled(){
    return periodicCallsEnabled;
}

public void startPeriodicUpdates(){ //CALL THIS IN ORDER TO START THE PERIODIC UPDATES
    periodicCallsEnabled=true;
    periodicCall();
}

public void stopPeriodicUpdates(){ //CALL THIS TO STOP THEM
    periodicCallsEnabled=false;
    myhandler.removeCallbacksAndMessages(null);
}


void periodicCall(){
    if(periodicCallsEnabled){

        //INSERT CUSTOM CODE HERE TO BE EXECUTED EVERY SECOND
        // ......

        myhandler.postDelayed(new Runnable(){
            public void run(){
                periodicCall();
            }
        },1000);
    }
}
于 2012-04-23T03:09:50.877 回答