3

タスク(つまり、テキストファイルからデータをロードする)を非同期で繰り返し、指定された時間に(つまり、数秒ごとに)実行しようとしていますが、この速度は実行時に変更される可能性があります。

私はいくつかの調査を行い、これにはAsyncTaskまたは別のスレッドのいずれかが必要になると判断しました。簡単にするために、AsyncTaskを使用することにしました。

ここで、繰り返しタイマースケジュールに従ってこのAsyncTaskを実行する必要があります。私はTimerとTimerTaskを利用しなければならないと信じています。

以下のコードは、私が達成しようとしていることの単純な形式です。Androidエミュレーターを使用して(Eclipse IDEを介して)このコードを実行しようとすると、「申し訳ありませんが、アプリケーションが予期せず停止しました。もう一度やり直してください。」というメッセージが表示されます。

どこで問題が発生し、どうすれば修正できるのか知りたいのですが。ありがとう!

public class Sample extends Activity {

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    SimpleTimerTask myTimerTask = new SimpleTimerTask(); 

    long delay = 0;
    long period = 5000;

    Timer myTimer = new Timer();
    myTimer.schedule(myTimerTask, delay, period);
}


private class SimpleAsyncTask extends AsyncTask<Void, Void, Void> {
    protected Void doInBackground(Void... params) {
        return null;
    }   
}


private class SimpleTimerTask extends TimerTask {
    public void run() {
        new SimpleAsyncTask().execute();
    }       
}

}

編集:関連していると思われるLogCatメッセージは次のとおりです

致命的な例外:タイマー-0

java.lang.ExceptionInInitializerError

で ...

原因:java.lang.RuntimeException:Looper.prepare()を呼び出していないスレッド内にハンドラーを作成できません

で ...

4

2 に答える 2

10

あなたはこの道を必要以上に難しくしています。はすでに独自のスレッドで実行されているため、実行するコードをメソッドに入れるだけTimerTaskで使用する必要はありません。AsyncTaskTimerTask.run()

于 2011-05-25T15:04:57.817 に答える