在哪里放置AsyncTask以便它只启动一次

时间:2014-02-28 14:31:59

标签: java android android-fragments android-asynctask

现在我有一个Timer在Fragment s onCreate方法中启动AsyncTask(定时器间隔为1分钟)。所以这不是一个好主意我相信,因为如果有一个配置更改,片段将再次调用onCreate方法,我将有2个正在运行的Timer AsyncTasks吗?

因此,我需要一些方法将AsyncTask放在应用程序的整个生命周期中仅启动一次的位置。

3 个答案:

答案 0 :(得分:4)

对于简单的计时器不需要Asynctask,试试这个 -

class MyFragment extends Fragment{
 private int currentTime;
 private void startTimer(){
  new Handler().
               postDelayed(new Runnable(){
                      @Override
                       public void run()
                       {
                        onTick();
                        startTimer(); 
                       }
                    },1000*60);
 }
 private void onTick()
 {
   currentTime++;
 }
 @Override
 public void onSaveInstanceState(Bundle outState)
 {
      outState.putInt("currentTime", currentTime);
  super.onSaveInstanceState(outState);
 }
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
    if (savedInstanceState != null)
 {
   currentTime=savedInstanceState.getInt("currentTime",0);
   startTimer();
 }
}

答案 1 :(得分:0)

您可以使用Countdown Timer并在onDestroy()中取消它。这样可以保证您在任何时间只运行一个。

至于启动它只是一次你必须根据你的需要在某个地方坚持这些知识。也许在onSaveInstanceState中存储一个布尔值并在onCreate()中读取它就可以了?

并且,正如@marcin_j指出的那样,AsyncTasks按顺序执行(除非特别以不同方式启动),因此使用一个将阻止应用程序中的每个其他异步任务(如下载内容等)。

答案 2 :(得分:0)

如果有配置更改,活动会被销毁并重新创建,所以不会有2个计时器在运行