我的
Android应用程序中有一个动画,闪烁一个TextView不同的颜色.我使用了TimerTask,Timer和Runnable方法来实现这一点.我需要做的是在用户在onPause()的动画中离开应用程序时停止线程,并在用户返回到onResume()中的应用程序时恢复线程.以下是我实现的代码,但它不工作(onPause()和onResume()),我不明白为什么.我已经看过类似的事情的其他一些帖子,但是他们没有帮助我弄清楚在我的情况下该怎么做.我读过TimerTasks已经过时了,我应该使用ExecutorService方法;我不知道如何实现这个功能.
...timerStep5 = new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { if (b5) { cashButton2SignalText.setBackgroundColor(Color.RED); cashButton2SignalText.setTextColor(Color.WHITE); b5=false; } else { cashButton2SignalText.setBackgroundColor(Color.WHITE); cashButton2SignalText.setTextColor(Color.RED); b5=true; } } }); } }; timer5.schedule(timerStep5,250,250); } public void onPause(){ super.onPause(); timerStep5.cancel(); } public void onResume(){ super.onResume(); timerStep5.run(); }
解决方法
在TimerTask被取消之后,它不能再运行,你必须创建一个新的实例.
在这里阅读细节:
https://stackoverflow.com/a/2098678/727768
对于较新的代码,推荐使用ScheduledThreadPoolExecutor,它处理像异常和任务比时间间隔更长的时间的情况.
但是对于你的任务,TimerTask就够了.