停止片段计时器onCloseActivity

时间:2016-10-28 23:35:59

标签: java android android-studio android-fragments timer

我有一个片段,当你初始化时,计时器立即开始运行,并且每隔6秒显示一个不同的图像。

我还没有完全弄清楚这个计时器是如何工作的,但不知怎的,我让它运行了,我明白计时器运行在一个不同的线程......甚至不确定究竟是什么意思:)

但是当我加载不同的片段时,计时器会导致崩溃。所以我想我必须在活动结束时取消计时器?

这让我有两个问题。 1)我可以从任何地方运行myTimer.cancel吗?如果是的话,我如何从我的主要活动或其他片段中运行它。

2)是否有像onCloseActivity这样的东西可以用于这个片段。所以我可以在离开片段后立即取消我的计时器?

这就是我启动计时器的方式:

//计时器     计时器myTimer;

/////////////////////
/////// timer ///////
/////////////////////
private void runTimer() {

    myTimer = new Timer();
    myTimer.schedule(new TimerTask() {
        @Override
        public void run() {
            TimerMethod();
        }

    }, 5000, 5000);
}

private Runnable Timer_Tick = new Runnable() {
    public void run() {

        // next image if THIS one is loaded
        nextImage();
    }
};

private void TimerMethod() {
    getActivity().runOnUiThread(Timer_Tick);
}

这是我的错误: 。getActivity()runOnUiThread(Timer_Tick); 加载不同的片段时会导致错误。

  

E / AndroidRuntime:致命异常:Timer-1   过程:com.murmurcalgary.murmurcalgaryevolvd,PID:8668   java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void android.support.v4.app.FragmentActivity.runOnUiThread(java.lang.Runnable)'   at com.murmurcalgary.murmurevolvd.fragments.EventsFragment.TimerMethod(EventsFragment.java:92)   在com.murmurcalgary.murmurevolvd.fragments.EventsFragment.access $ 000(EventsFragment.java:45)   在com.murmurcalgary.murmurevolvd.fragments.EventsFragment $ 1.run(EventsFragment.java:77)   在java.util.Timer $ TimerImpl.run(Timer.java:284)

1 个答案:

答案 0 :(得分:2)

您可以使用片段的生命周期方法来停止计时器。

覆盖片段中的onStop()方法,然后取消该方法中的计时器任务。

@Override
public void onStop() {
    super.onStop();
    if(timerTask != null){
        timerTask.cancel();
        //cancel timer task and assign null
    }
}