2016-09-06 3 views
1

私はこのような方法でAsyncTaskクラス(クラス:ApiConnector):持っている私は、実行時に無限ループでAsyncTaskを実行するには?

new ApiConnector() 
{ 
    @Override 
    public void onPostExecute(String result) 
    { 
     Log.d("here: ", result); 
    } 
}.execute(); 

この作品の罰金:私の活動で

@Override 
protected String doInBackground(Void... voids) 
{ 
    return getToken(); //<-- do many the most important things and return String 
} 

@Override 
protected void onPostExecute(String result) 
{ 
    super.onPostExecute(result); 
} 

、その後にこれは一度ですが、私は市場で新鮮なリンゴのように常に新鮮なトークンを取るためにこれを無限ループでやらなければなりません。私はそのようなものを試した:

while (true) 
{ 
    new ApiConnector() 
    { 
     @Override 
     public void onPostExecute(String result) 
     { 
      Log.d("here!", result); 
     } 
    }.execute(); 
    Thread.sleep(1000); 
} 

と多くの多くの愚かなものが、私は働く方法を見つけることができません。すべてのスレッドbussinessは私のためのトリッキーです。私にいくつかキックを与え、私はこれを確かに管理する。

+1

ループ内で非同期を呼び出すには?それは非常に悪い決定だよ。あなたのトークンを更新するために 'Timer'または' Handler'を使用してください。あなたは 'callOnExecutor()' AsyncTaskを並列に複数のスレッドを実行することもできます – hrskrs

+0

私は非常に悪い決定が私のために非常に最初のためにアンドロイドで何かを書く。助けてくれてありがとう、私はタイマーやハンドラの詳細を読む。 –

答えて

0

Like hrskrsコメントHandlerを使用して何かを繰り返し実行することをお勧めします。主な利点は、postDelayedがメインアプリケーションスレッドでrun()メソッドを実行するようになり、UIコンポーネントにアクセスして変更できることです。あなたがこれを行うにはしたくない

public class MyTest implements Runnable { 
    private final static int INTERVAL = 5000; 

    private Handler mHandler; 

    private MyTest() { 
     mHandler = new Handler(); 
    } 

    public void start() { 
     run(); 
    } 

    public void stop() { 
     mHandler.removeCallbacks(this); 
    } 

    @Override 
    public void run() { 
     // put here the logic that you want to be executed 
     mHandler.postDelayed(this, INTERVAL); 
    } 
} 
0

は、ここでの例です。すべてのAsyncTaskは1つのスレッドで実行されます。 AsyncTaskの内部を無限にループすると、他のすべてのタスクが無駄になります。各タスクに新しいタスクを開始させると、依然として大きな飢餓問題が発生する危険があります。

これを行うには(実際にはわからないが無視する)、正しい方法はスレッドを使用することです。スレッドは、巨大while(真)ループと最後にsleep文を持つことができます。

+0

は、スレッドを使用して、たとえば、問題です: http://stackoverflow.com/questions/7857343/asynctask-cannot-work-in-thread-android 私はそれを書くdidntのが、入手トークンは、()だけ愚かです実際の人生では、私はそこでjsonとsthをダウンロードするようなことをたくさんする必要があります(今は重要ではありません)。私は、アンドロイドの主なスレッドの活動でそのようなものを行うことはできませんので、書き込みメソッドdownloadJson didntの作業のような単純なソリューション。 AsyncTaskでこれを行う正しい方法が得られるが、私は30秒間jsonをリフレッシュしたいが、今は問題がある。その奇妙なAsyncTaskをどうやって行うのか。 –

+0

まず、thaatの質問は、自分が何をしているのか分からない人が書いたものです。asynctaskはスレッドからうまく呼び出すことができます。次に、* AsyncTaskの代わりに* Thread *を使用します。 AsyncTaskは、あなたが望むものに対して間違った解決策です。 –

関連する問題