我有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);
}
和许多愚蠢的事情,但我找不到工作方式。所有线程业务对我来说都很棘手。给我一些启动,我肯定会管理它。
答案 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语句。