如何在无限循环中执行AsyncTask?

时间:2016-09-06 19:36:06

标签: java android android-asynctask

我有AsyncTask类,有这样的方法(类:ApiConnector):

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

然后在我的活动中:

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

当我执行这一次时它工作正常,但我必须在无限循环中执行此操作,以便在我的市场中采用像新鲜苹果一样的新鲜令牌。我尝试过类似的东西:

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

和许多愚蠢的事情,但我找不到工作方式。所有线程业务对我来说都很棘手。给我一些启动,我肯定会管理它。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

你不想这样做。所有AsyncTasks都在一个线程上运行。如果您在AsyncTask中无限循环,那么您将使所有其他任务匮乏。如果你让每项任务都开始一项新任务,那么你仍然会面临主要的饥饿问题。

如果你想这样做(我不确定你真的这么做,但让我们忽略它),正确的方法是使用一个线程。一个线程可以在最后有一个巨大的while(true)循环和一个sleep语句。