2012-04-23 53 views
1

我想每隔一秒更新一次我的活動中的變量,並且爲此我正在使用異步任務和其中的可運行內存。我不斷收到這樣的錯誤:「不能在不同的方法中定義的內部類中引用非最終變量myRunnable」。當我將聲明更改爲final時,它顯示「局部變量myRunnable可能尚未初始化」。我該如何糾正錯誤?有沒有更好的方式來做我想做的事情?Android:在異步任務中使用可運行時出錯

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; 
} 

回答

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); 
    } 
} 
+0

我用我的onCreate方法調用startPeriodicUpdates。然而,當我按下返回按鈕,打開在仿真器中的應用程序一遍,得到的onCreate再次調用。如何解決這個問題? – hektor 2012-04-24 02:56:35

+0

當您按下後退按鈕時,它肯定會調用onDestroy(請參閱Google的d中的Android Activity Lifecycle圖ocumentation)。我認爲你在你的onDestroy方法中調用stopPeriodicUpdates()?否則,如果你想要的是startPeriodicUpdates()方法只在某人第一次加載你的應用程序時被調用,而不是之後(即不是某人關閉你的應用程序並再次打開它時),那麼你可能想要存儲您的應用程序的狀態更持久,如SharedPreferences對象... – epichorns 2012-04-28 01:29:59