从cancel方法的文档中:
(松散地说,如果此方法阻止执行一个或多个计划的执行,则返回true。)
当我执行此代码时:
private Timer timer = null;
private TimerTask runnable = new TimerTask() {
@Override
public void run() {
Log.e("DEBUG", "Scheduled task tick");
if(!looper){
Looper.prepare();
looper = true;
}
VolleyConnect vc = new VolleyConnect();
vc.connect(ErrorListActivity.this);
}
};
@Override
public void onWindowFocusChanged(boolean focus){
if(!focus){
kill();
}else{
start();
}
Log.e("DEBUG", "FOCUS " + focus);
}
public void start(){
if(timer == null){
timer = new Timer();
//180000 ms = 3 minutes
timer.scheduleAtFixedRate(runnable, 0L, 180000L);<--- This line is the one that triggers the error.
}
}
public void kill(){
if(timer != null) {
boolean rep = runnable.cancel();
Log.e("DEBUG", "REP = " + rep);
timer.cancel();
timer = null;
looper = false;
}
}
出乎意料的是,调试语句将输出:
E/DEBUG: REP = true
这表明取消应该完成。但是,当我重新获得窗口焦点(并尝试重新安排计时器)时,应用程序因以下错误而崩溃:
java.lang.IllegalStateException: Task already scheduled or cancelled
at java.util.Timer.sched(Timer.java:401)
at java.util.Timer.scheduleAtFixedRate(Timer.java:328)
at com.package.ErrorListActivity.start(ErrorListActivity.java:198)
at com.package.ErrorListActivity.onWindowFocusChanged(ErrorListActivity.java:189)
at android.support.v7.view.WindowCallbackWrapper.onWindowFocusChanged(WindowCallbackWrapper.java:128)
at android.support.v7.view.WindowCallbackWrapper.onWindowFocusChanged(WindowCallbackWrapper.java:128)
at com.android.internal.policy.DecorView.onWindowFocusChanged(DecorView.java:1414)
at android.view.View.dispatchWindowFocusChanged(View.java:10173)
at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:1192)
at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3757)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6120)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
我不知道如何解决此问题,并且我已经浏览了其他类似的问题,但没有任何效果。有任何想法吗?
您 不能 重复使用timertask。创建的新实例TimerTask
。
我正在尝试使用cmd中的以下命令安装Yeoman: 我得到以下信息: 安装了以下内容: Node.jsv4.4.4 npm v2.15.1,v3.9.0(我尝试了两个版本,我有完全相同的输出消息) 我的电脑在Windows7 x64上运行。 我尝试过的解决方案: > 我跑 npm缓存清除 但是没有运气。 我还尝试了以下方法: > 已删除C:\\AppData\Roaming\npm缓存文件夹 在此
我正在使用Context.SendorderedBroadcast方法发送广播,并在到达ResultReceiver之前检查是否有人收到了广播。 下面是一段代码: 到目前为止,我只在搭载Android 2.1版本的摩托罗拉Defy手机上遇到过这种情况,但它也可能发生在其他手机上。 我在网上找不到任何关于它的参考资料,有人知道为什么会这样吗?谢谢!
问题内容: 遵循Android标签的任何人都可能对我很熟悉。我很难为我的高分实现SQLite数据库。这也是我第一次使用SQLite。 我正在尝试仅插入两个变量-int和long。我的方法无法正常工作。除了上面讨论的内容外,任何其他建议也应受到赞赏。 预先感谢您的帮助。 Highscores.java DatabaseHelper.java LogCat输出 问题答案: 在这行上,打开数据库: 这会
问题内容: 我正在使用以下时间戳格式: 以下方法可以正常工作: 而且,当我使用该格式字符串传递时间戳时,它返回,例如: 然后,我需要再次从该字符串映射到时间戳,本质上是相反的操作。我知道我可以使用和及其方法,但是如果可能的话,我宁愿坚持使用样式格式。 我写了这段代码(相当hacky),它适用于某些格式,但不适用于特定格式: 在第二部分,它失败了。 堆栈跟踪: 有没有一种更简单的方法可以在不利用我的
问题内容: 在Windows上安装了Docker,并额外安装了2个Oracle VM VirualBox和Kitematic。我在Windows 10 PC中禁用了Hyper-V。现在的问题是我无法从DockerHub下载任何Docker映像,甚至我都无法以如下方式运行命令 两端都显示以下错误。 尝试连接时发生错误:获取 http:// localhost:2375 / v1.21 / info
我还更新了相关的XML文件,其中提到了spring security bean。我在用Postgres数据库。而且,在我的系统中,一切都运行良好,当我将这些更改提交到QA环境时,登录不工作。我在登录到应用程序时检查了日志,它显示了一些错误。这是日志 还有,如何检查ubuntu服务器中的PostgreSQL JDBC驱动程序版本?有人能帮我解决这个问题吗?谢谢