2012-04-23 12 views
1

アクティビティの変数を1秒に1回更新したいと思います。そのために、Asyncタスクとその内部の実行可能ファイルを使用しています。このエラーは、「別のメソッドで定義された内部クラスの内部で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

+0

戻るボタンを押すと、確実にonDestroyが呼び出されます(GoogleのdのAndroid Activity Lifecycleグラフを参照)。 ocumentation)。私はあなたのonDestroyメソッドでstopPeriodicUpdates()を呼び出すと仮定しますか?それ以外の場合、startPeriodicUpdates()メソッドは、誰かがあなたのアプリを初めて読み込んだときに呼び出されるだけで、後で(つまり、誰かがあなたのアプリケーションを閉じてからもう一度開いたときに)呼び出されない場合は、あなたのアプリケーションの状態をSharedPreferencesオブジェクトのようなもっと永続的なものにする – epichorns

関連する問題