3

クラス ( を拡張する) のインスタンスを作成し、 5 分ごとにAsynctaskそのメソッドを呼び出したいと考えています。execute()そのためにThread.sleep(5*60*1000))onPostExecute()メソッドを呼び出してから、クラスの新しいインスタンスを作成しようとしました。コードは以下の通りです。

public class MyAsyncTask extends AsyncTask<String, Void, String>
{
    protected String doInBackground(String... arg0) {
        //whatever I want to do
    }

    protected void onPostExecute(String result) {
        Thread.sleep(5*60*1000);
        new MyAsyncTask().execute("my String");
    }
}

ただし、このコードを使用すると、UI が 5 分間ブロックされます。onPostExecute()コードがUIスレッドで実行されることをどこかで読みました。これは、UI がブロックされている理由を説明しています。AsyncTaskしかし、UI をブロックせずにの新しいインスタンスを作成するにはどうすればよいでしょうか?

助言がありますか ?ありがとう。

4

3 に答える 3

2

このコードを使用

Timer timer = new Timer();
timer.schedule( new TimerTask() {
public void run() {
       new MyAsyncTask().execute("my String");
 }
}, 0, 5*60*1000);
于 2013-04-27T13:37:17.340 に答える
1

タスクを繰り返す方法はたくさんありますが、多くの実験の結果、アクティビティを実際に実行せずに通常のタスクを実行するには、AlarmManager を使用する必要があることがわかりました。他のすべての手法は、UI の実行が必要なアプリ向けです。ハンドラーはうまく機能します@Sagarの応答は良好です。

バックグラウンドとして/UIなしで実行したいアラームマネージャーの例を確認してください。

于 2013-04-27T17:30:17.033 に答える