Android 服务以疯狂的方式循环

Android 服务以疯狂的方式循环,android,Android,我刚刚做了一个服务来设置一些东西,添加了一个日志和一个计时器,计时器延迟是以SharedReferences值的形式出现的,该值返回5分钟,问题是服务以一种疯狂的方式循环,这不是1秒延迟,不是。。它的延迟不到一秒,并且正在输出日志消息 还有,我在另一个服务中使用了相同的代码,我只有在这个服务中有这个问题,代码: 舱单: <service android:name=".services.ServiceTest" android:enabled=

我刚刚做了一个服务来设置一些东西,添加了一个日志和一个计时器,计时器延迟是以SharedReferences值的形式出现的,该值返回5分钟,问题是服务以一种疯狂的方式循环,这不是1秒延迟,不是。。它的延迟不到一秒,并且正在输出日志消息

还有,我在另一个服务中使用了相同的代码,我只有在这个服务中有这个问题,代码:

舱单:

        <service
        android:name=".services.ServiceTest"
        android:enabled="true"
        android:exported="false" >
    </service>
Receiver在if语句中执行操作,并通过intent以以下方式运行服务:

        Intent ServiceTestIntent = new Intent(context, ServiceTest.class);
        context.startService(ServiceTestIntent);
服务:

    @Override
public int onStartCommand(Intent intent, int flags, int startId) {
    SharedPreferences Preference = PreferenceManager.getDefaultSharedPreferences(this);
    int Delay= Preference.getInt("Value", 2 * 60 * 1000);
    MyTimer = new Timer();
    new Thread()
    {
        public void run() {
            MyTimer.schedule(new TimerTask() {
                @Override
                public void run() {
                    Log.i(Fragment.TAG,"Message Test");
                }
            }, Delay, Delay);
        }
    }.start();

    return START_NOT_STICKY;
}
延迟返回5分钟(5*60*1000),然后我将其存储在SharedReferences中,当我记录值时,它显示为5分钟,因此这是一个正确的时间,即使默认值为2分钟,服务也会直接循环并输出消息

接收人:

        if(intent.getAction().equals(mainactivity.package+"startservice"))
    {
        context.startService(ServiceIntent);
    }
更新: 另一件事是,我得到了3个不同接收器的其他服务,当我切换其中任何一个时,测试服务将启动,即使我没有启动它或引用它,或其他交换机中与它相关的任何东西。
我已尝试使用根应用程序删除程序重新启动/App full deletation。

添加日志语句以显示延迟。延迟值错误或服务已启动多次:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    SharedPreferences Preference = PreferenceManager.getDefaultSharedPreferences(this);
    final int Delay= Preference.getInt("Value", 2 * 60 * 1000);
    Log.i(Fragment.TAG, String.format("onStartCommand(): delay=%d", Delay));
    final Timer MyTimer = new Timer();
    new Thread()
    {
        public void run() {
            MyTimer.schedule(new TimerTask() {
                @Override
                public void run() {
                    Log.i(Fragment.TAG, "Message Test");
                }
            }, Delay, Delay);
        }
    }.start();

    return START_NOT_STICKY;
}

您确定延迟值的单位正确吗?应以毫秒为单位,因此实际值应为300000。我在
Preference.getInt()
的默认返回值中看到它是正确的,但我要问的是您的首选项文件中存储了什么。是的,它是正确的,我键入的只是一个注释,所以没有人会误解我,但似乎有人误解了我的意思:p.只是检查一下-“代码从不说谎,注释有时会说谎”——不是说你撒谎,只是说每个人都会犯错Np,值是300000,它返回正确,将尝试重新构建它并检查我添加和看到的所有内容。你能发布你的广播接收器代码吗?如果您正在接收其他事件并启动其他服务,您可能会意外地同时启动此事件,正如您的更新所示。值是正确的,即“300000”,将重新构建它并查看我添加的所有内容。当您查看此日志输出时,是否看到第一条日志语句
log.i(Fragment.TAG,String.format)(“onStartCommand():delay=%d”,delay));
只打印一次,然后第二个打印多次?或者两个都打印多次?每次为您的服务调用
startService()
时,“onStartCommand()…”消息都会出现一次。当我运行此代码时,它会出现一次,然后是“消息测试”“消息每隔
延迟
毫秒出现一次。如果您多次看到“onStartCommand()…”,您的服务将启动多次,每次都有一个新的计时器线程。看起来很多:D,我刚刚从头开始重新编写了类,问题得到了解决,我感到很疯狂,因为我重新编写了相同的代码,但在尝试日志之后,消息只输出了一次。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    SharedPreferences Preference = PreferenceManager.getDefaultSharedPreferences(this);
    final int Delay= Preference.getInt("Value", 2 * 60 * 1000);
    Log.i(Fragment.TAG, String.format("onStartCommand(): delay=%d", Delay));
    final Timer MyTimer = new Timer();
    new Thread()
    {
        public void run() {
            MyTimer.schedule(new TimerTask() {
                @Override
                public void run() {
                    Log.i(Fragment.TAG, "Message Test");
                }
            }, Delay, Delay);
        }
    }.start();

    return START_NOT_STICKY;
}