现在我有一个Timer在Fragment
s onCreate
方法中启动AsyncTask(定时器间隔为1分钟)。所以这不是一个好主意我相信,因为如果有一个配置更改,片段将再次调用onCreate方法,我将有2个正在运行的Timer AsyncTasks吗?
因此,我需要一些方法将AsyncTask放在应用程序的整个生命周期中仅启动一次的位置。
答案 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个计时器在运行