Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在安卓系统中,服务声明为静态服务时,是否可能遇到竞争条件?_Android_Service_Synchronization - Fatal编程技术网

Android 在安卓系统中,服务声明为静态服务时,是否可能遇到竞争条件?

Android 在安卓系统中,服务声明为静态服务时,是否可能遇到竞争条件?,android,service,synchronization,Android,Service,Synchronization,我对Android中某些服务的发布有以下结构: 我有一个初始服务,它检查启动某些服务所需的某些条件是否满足,如果满足这些条件,服务将启动 当这些服务要执行其关键操作时,会检查这些条件是否仍然适用,如果不适用,则会自行停止,以及所有可能因该条件而得到错误结果的其他服务。然后他们调用初始服务,该服务将继续检查这些条件,一旦满足这些条件,它将自行完成并再次启动服务 保持初始服务永久运行是没有用的,因为某些条件与任何android事件无关,所以唯一的方法是在无限循环中检查它们,当这些条件满足时,循环将中

我对Android中某些服务的发布有以下结构:

我有一个初始服务,它检查启动某些服务所需的某些条件是否满足,如果满足这些条件,服务将启动

当这些服务要执行其关键操作时,会检查这些条件是否仍然适用,如果不适用,则会自行停止,以及所有可能因该条件而得到错误结果的其他服务。然后他们调用初始服务,该服务将继续检查这些条件,一旦满足这些条件,它将自行完成并再次启动服务

保持初始服务永久运行是没有用的,因为某些条件与任何android事件无关,所以唯一的方法是在无限循环中检查它们,当这些条件满足时,循环将中断,这相当消耗电池

两个服务可能同时尝试创建相同的初始服务

我的意思是可能出现这样的情况:

服务1:

查找此代码以初始化服务:

public static Intent myinitialService=null;

[...]

if (StaticMethods.myinitialService==null)
                {
                    StaticMethods.myinitialService= new Intent(getBaseContext(),myinitialService.class);
                    startService(StaticMethods.myinitialService);

                }
同时,有一个service2可以同时读取“if(StaticMethods.myinitialService==null)”,导致service1和service2启动相同的初始服务,这也可能导致每个服务创建一个以上的服务,依此类推


但我认为,只要将变量声明为静态变量,就不可能发生这种情况,即使发生类似的情况,也只有一个服务会启动,但我想确定,如果不是这样,可以做些什么来避免这种情况。

实际上,服务只创建一次(如果未调用stopSelf或stopService)。随后的startService()调用不会创建服务,而是向其发送onStartCommand事件。@user1055395,谢谢您的回答,但这对我的问题没有帮助,即使没有启动新的服务,它也可能最终执行不需要的代码。