Java 如何在无限循环中执行异步任务?

Java 如何在无限循环中执行异步任务?,java,android,android-asynctask,Java,Android,Android Asynctask,我有一个AsyncTask类,其方法如下(类:ApiConnector): 然后在我的活动中: new ApiConnector() { @Override public void onPostExecute(String result) { Log.d("here: ", result); } }.execute(); 当我执行这一次时,效果很好,但我必须在无休止的循环中执行这一操作,以便在我的市场中获得像新鲜苹果一样的新鲜代币。我试过这样的方

我有一个AsyncTask类,其方法如下(类:
ApiConnector
):

然后在我的活动中:

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);
}
还有很多愚蠢的事情,但我找不到工作的方法。全线程业务对我来说很棘手。给我点刺激,我一定会做到。

就像hrskrs评论的那样,我更喜欢使用
处理程序来重复执行某些操作。主要优点是
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);
    }
}
就像hrskrs评论的那样,我更喜欢使用
处理程序
重复执行某些操作。主要优点是
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);
    }
}

你不想这么做。所有异步任务都在一个线程上运行。如果在一个异步任务中无限循环,则会耗尽所有其他任务。如果你让每个任务都开始一个新任务,那么你仍然会面临严重的饥饿问题


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

你不想这样做。所有异步任务都在一个线程上运行。如果在一个异步任务中无限循环,则会耗尽所有其他任务。如果你让每个任务都开始一个新任务,那么你仍然会面临严重的饥饿问题


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

调用异步in循环?这是一个非常糟糕的决定,伙计。使用
计时器
处理程序
在给定时间段内更新您的令牌或任何内容。你也可以
callOnExecutor()
AsyncTask来并行运行多个线程。我第一次在android中写了一些东西,所以非常糟糕的决定对我来说是正常的。感谢您的帮助,我将阅读更多关于计时器或处理程序的信息。要在循环中调用异步吗?这是一个非常糟糕的决定,伙计。使用
计时器
处理程序
在给定时间段内更新您的令牌或任何内容。你也可以
callOnExecutor()
AsyncTask来并行运行多个线程。我第一次在android中写了一些东西,所以非常糟糕的决定对我来说是正常的。感谢您的帮助,我将阅读更多关于计时器或处理程序的内容。使用线程是一个问题,例如:我没有编写它,但getToken()只是一个愚蠢的名称-在现实生活中,我需要在那里做很多事情,如下载json和其他(现在不重要)。像write method downloadJson这样的简单解决方案不起作用,因为我无法在android主线程活动中执行类似的操作。我在AsyncTask中得到了“正确的方法”(最好不要更改),但我想刷新json 30秒,现在我遇到了一个问题——如何使用那个奇怪的AsyncTask做到这一点。首先,这个问题是由不了解自己在做什么的人写的——可以从线程调用AsyncTask。其次,您将使用线程而不是异步任务。AsyncTask不是您想要的解决方案。使用线程是一个问题,例如:我没有编写它,但getToken()只是一个愚蠢的名称-在现实生活中,我需要在那里做很多事情,比如下载json和其他(现在不重要)。像write method downloadJson这样的简单解决方案不起作用,因为我无法在android主线程活动中执行类似的操作。我在AsyncTask中得到了“正确的方法”(最好不要更改),但我想刷新json 30秒,现在我遇到了一个问题——如何使用那个奇怪的AsyncTask做到这一点。首先,这个问题是由不了解自己在做什么的人写的——可以从线程调用AsyncTask。其次,您将使用线程而不是异步任务。AsyncTask是错误的解决方案。
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);
    }
}