当前位置: 首页 > 面试题库 >

无法在Android的服务中启动计时器

司马腾
2023-03-14
问题内容

我不知道发生了什么问题…我无法在服务中启动计时器。遵循代码

public class BkgService extends Service{

private Timer ServUpdTimer = new Timer();
private static  long TMR_INTERVAL = 10*60*1000;

public void onCreate() {
    super.onCreate();
    StartServUpdateTask();
    }

private void StartServUpdateTask() {

        if(ServUpdTimer != null)
            ServUpdTimer.cancel();


        ServUpdTimer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
            }
        }, 0, TMR_INTERVAL);
    }
}

但是当我到达生产线时,ServUpdTimer.scheduleAtFixedRate()我得到了以下异常

03-03-23:32:14.851:E /
AndroidRuntime(6083):java.lang.RuntimeException:无法使用意图{cmp = mt.android.app
/ .BkgService}启动服务mt.android.app.BkgService@40544838:
java.lang.IllegalStateException:计时器已取消

如果有人可以对此有所启发,我将不胜感激。


问题答案:

从Javadoc中获取Timer.cancel()

计时器终止后,其执行线程将正常终止,并且无法在其上安排更多任务。

从Javadoc中获取Timer.scheduleAtFixedRate()

抛出:IllegalStateException-如果任务已被调度或取消,计时器被取消或计时器线程终止。

Timer被立即取消:你需要创建一个新的实例

private void StartServUpdateTask() {

    if(ServUpdTimer != null)
    {
        ServUpdTimer.cancel();
    }
    ServUpdTimer = new Timer();

    ...
}


 类似资料:
  • 好吧,这就是问题所在。我做,但我没有从或获得新的日志消息。 舱单: null 活动代码: 我试过什么: 将所有“cont”更改为“this” StartService(新意图(cont,FlashService.class)); null 更新: 完整活动代码:

  • 问题内容: 我在启动时无法启动服务。 我有一个广播接收器,只要设备启动(不是),就应该调用它,它会启动我的服务。不幸的是,该服务尚未启动! 我查看了此页面,阅读了所有答案,并按照每个步骤进行了操作……但是它仍然无法正常工作。每当手机重新启动/开机时,我都想启动我的服务。 但是我的服务仍然无法启动。这是我的清单: 在过去的三天中,我一直对此保持执着, 非常感谢您的帮助。为什么我的服务无法在启动时启动

  • 问题内容: 从我在Stack Exchange和其他地方看到的所有内容中,我已经正确设置了所有内容,可以在启动Android OS时启动IntentService。不幸的是,它没有在启动时启动,并且我没有收到任何错误。也许专家可以帮忙… 表现: 用于启动的BroadcastReceiver: 更新:我尝试了下面的几乎所有建议,并;在处理程序中添加了日志记录,但从未记录过任何内容。因此,它甚至还没有

  • 无法启动nginx服务器OS:ubuntu服务器16.04 systemctl status nginx.status抛出此消息:nginx.service-高性能web服务器和反向代理服务器加载:加载(/lib/systemd/system/nginx.service;enabled;vendor preset:enabled)活动:失败(结果:exit-code)自UTC Thu 2016-1

  • 问题内容: 当设备在android上启动时,我一直在尝试启动服务,但无法正常工作。我已经看了许多在线链接,但是这些代码都不起作用。我忘记了什么吗? 广播接收器 问题答案: 作为附加信息:BOOT_COMPLETE在挂载外部存储之前发送到应用程序。因此,如果将应用程序安装到外部存储,它将不会收到BOOT_COMPLETE广播消息。

  • 当我试图在eclipse oxygen中启动tomcat服务器(8.5.39)时,出现一个错误,显示: “-djava.endorsed.dirs=d:\server\apache-tomcat-8.5.39\endorsed不支持。endorsed标准和模块化的独立API将通过可升级模块的概念提供支持。” 当我从bin文件夹中的文件启动Tomcat服务器时,他成功地启动了,没有任何问题。我想从E