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)
您可以使用片段的生命周期方法来停止计时器。
重写片段中的 onStop() 方法,然后取消该方法内的计时器任务。
@Override
public void onStop() {
super.onStop();
if(timerTask != null){
timerTask.cancel();
//cancel timer task and assign null
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2311 次 |
最近记录: |