Java 如何在android中关闭计时器?
嗨,在我的编码中,我需要创建一个计时器任务来执行一些函数,这个函数调用了多次,所以在运行同一个任务之前,我需要缓存旧的正在运行的任务并再次启动这个计时器。我已经使用了Java 如何在android中关闭计时器?,java,android,timer,timertask,Java,Android,Timer,Timertask,嗨,在我的编码中,我需要创建一个计时器任务来执行一些函数,这个函数调用了多次,所以在运行同一个任务之前,我需要缓存旧的正在运行的任务并再次启动这个计时器。我已经使用了特性dcouponrotationtimer.cancel()但它不工作,我在logcate中遇到一些错误 public void startPagerRotationTimer(){ featuredCouponRotationTimer.cancel(); featuredCouponRotationTimer
特性dcouponrotationtimer.cancel()代码>但它不工作,我在logcate中遇到一些错误
public void startPagerRotationTimer(){
featuredCouponRotationTimer.cancel();
featuredCouponRotationTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if(!isBeingTouched){
ActivityMain.getActivityMain().runOnUiThread(new Runnable() {
public void run() {
Log.i("pagerDurationFeaturedCoupons","setData :working");
}
}
});
}
}
}, 0, 2000);
}
Logcat错误
02-25 20:25:18.210 816-816/com.shoplylabs.shoplys E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.IllegalStateException: Timer was canceled
at java.util.Timer.scheduleImpl(Timer.java:561)
at java.util.Timer.scheduleAtFixedRate(Timer.java:528)
at com.shoplylabs.shoplys.view.ViewContainerFeaturedCoupon.startPagerRotationTimer(ViewContainerFeaturedCoupon.java:190)
at com.shoplylabs.shoplys.view.ViewContainerFeaturedCoupon.setData(ViewContainerFeaturedCoupon.java:182)
at com.shoplylabs.shoplys.adapters.AdapterShoplyCouponStaggeredGrid.getView(AdapterShoplyCouponStaggeredGrid.java:156)
at com.shoplylabs.shoplys.components.staggeredgridview.StaggeredGridView.obtainView(StaggeredGridView.java:1533)
at com.shoplylabs.shoplys.components.staggeredgridview.StaggeredGridView.fillDown(StaggeredGridView.java:1245)
at com.shoplylabs.shoplys.components.staggeredgridview.StaggeredGridView.populate(StaggeredGridView.java:846)
at com.shoplylabs.shoplys.components.staggeredgridview.StaggeredGridView.onLayout(StaggeredGridView.java:797)
at android.view.View.layout(View.java:15214)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076)
at android.view.View.layout(View.java:15214)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:15214)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:15214)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
at android.view.View.layout(View.java:15214)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:15214)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:15214)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:15214)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076)
at android.view.View.layout(View.java:15214)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:890)
at android.view.View.layout(View.java:15214)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:15214)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.support.v7.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:502)
at android.view.View.layout(View.java:15214)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:15214)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
at android.view.View.layout(View.java:15214)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
at android.view.View.layout(View.java:15214)
at android.view.ViewGroup.layout(ViewGroup.java:4793)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2260)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2007)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1249)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6364)
at android.view.Choreographer$CallbackRecord.run(Choreographe
请在我做错的地方帮助我原因已明确说明:
java.lang.IllegalStateException:计时器已取消
您需要重新初始化功能UponRotationTimer
对象,以避免非法状态异常
新代码不建议使用计时器,您应该查看
如果要保留计时器,请使用以下命令:
public void startPagerRotationTimer()
{
if (featuredCouponRotationTimer != null)
{
featuredCouponRotationTimer.cancel();
}
featuredCouponRotationTimer = new Timer();
featuredCouponRotationTimer.scheduleAtFixedRate(
new TimerTask()
{
@Override
public void run()
{
if (!isBeingTouched)
{
ActivityMain.getActivityMain().runOnUiThread(
new Runnable()
{
public void run()
{
Log.i("pagerDurationFeaturedCoupons", "setData :working");
}
}
);
}
}
}, 0, 2000);
}
like FeaturedUponRotationTimer=新计时器();FeaturedUponRotationTimer.cancel();取消后不能使用计时器
实例,因此必须在调用cancel()
后重新初始化。您可以给出一些示例,或者说我必须在我的编码featuredCuponRotationTimer.cancel()中添加哪一行吗代码>featuredUponRotationTimer=新计时器()代码>我已经试过了,我得到了java.lang.NullPointerExceptionno这不起作用2任务正在同时运行第一个任务没有得到取消这是取消计时器的方法。您需要为启动的每个计时器运行此代码(并将它们的引用保留在ArrayList中),my FeaturedUponRotationTimer始终为空,因此它不会取消plz帮助。meI使用ScheduledExecutorService和Singleton模式发布了类似的答案。根据您的帖子和评论,我想这是重新格式化代码的最佳方式。