在CloseActivity 上停止片段计时器

Joe*_*ade 2 java android timer android-fragments android-studio

我有一个片段,其中计时器在初始化时立即开始运行,并且每 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);
}
Run Code Online (Sandbox Code Playgroud)

这是我的错误: 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)' 在 com.murmurcalgary.murmurevolvd.fragments.EventsFragment.TimerMethod(EventsFragment.java:92) 处的 com.murmurcalgary.murmurevolvd.fragments.EventsFragment.access$000(EventsFragment.java:45) 处的空对象引用上。 murmurcalgary.murmurevolvd.fragments.EventsFragment$1.run(EventsFragment.java:77) 在 java.util.Timer$TimerImpl.run(Timer.java:284)

San*_*eet 5

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

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

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