Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.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 启动安卓服务后,是否可以立即在while循环中等待?_Android_Service - Fatal编程技术网

Android 启动安卓服务后,是否可以立即在while循环中等待?

Android 启动安卓服务后,是否可以立即在while循环中等待?,android,service,Android,Service,长话短说,我启动一个服务,在服务内部初始化一个静态变量,然后在主线程中等待这个静态变量被设置。所以我测试了它,它被卡住了(就像永远在while循环中一样),它开始让我觉得这是不可能的。我的逻辑是,服务作业被放入要执行的主线程队列中,但它尚未启动,它将只在当前主线程作业完成之前启动,并且服务作业只能在之后启动。所以我觉得这是不可能的。这是正确的逻辑吗?下面是代码 Intent exampleIntent = new Intent(this, Example.class); startService

长话短说,我启动一个服务,在服务内部初始化一个静态变量,然后在主线程中等待这个静态变量被设置。所以我测试了它,它被卡住了(就像永远在while循环中一样),它开始让我觉得这是不可能的。我的逻辑是,服务作业被放入要执行的主线程队列中,但它尚未启动,它将只在当前主线程作业完成之前启动,并且服务作业只能在之后启动。所以我觉得这是不可能的。这是正确的逻辑吗?下面是代码

Intent exampleIntent = new Intent(this, Example.class);
startService(exampleIntent);
while(Example.variable == null) {
  //waiting for it to be initialized
}
我启动一个服务,在服务内部初始化一个静态变量,然后在主线程中等待这个静态变量被设置

那是不可能的。只有将主应用程序线程的控制权返回到框架,服务才会启动

因此,修改您的方法,让您的服务让活动知道其工作何时通过其他方式完成,例如使用事件总线(greenrobot的事件总线、
LocalBroadcastManager
MutableLiveData
、基于Rx的事件总线等)

我启动一个服务,在服务内部初始化一个静态变量,然后在主线程中等待这个静态变量被设置

那是不可能的。只有将主应用程序线程的控制权返回到框架,服务才会启动


因此,修改您的方法,让您的服务让活动知道其工作是通过其他方式完成的,例如使用事件总线(greenrobot的事件总线、
LocalBroadcastManager
MutableLiveData
、基于Rx的事件总线等)。

该代码似乎是错误的:D

首先,您应该使用服务绑定来绑定到服务并与之通信。这样,您就可以知道服务何时运行,并可以与之通信。
第二,你不应该在循环中等待事情发生。使用一些观察者模式或LiveData或向活动发送意图,使服务器宣布其已完成工作的活动。不要等到活动完成后才让服务完成工作。在while循环中等待将阻止UI线程,应用程序将冻结

代码似乎错误:D

首先,您应该使用服务绑定来绑定到服务并与之通信。这样,您就可以知道服务何时运行,并可以与之通信。
第二,你不应该在循环中等待事情发生。使用一些观察者模式或LiveData或向活动发送意图,使服务器宣布其已完成工作的活动。不要等到活动完成后才让服务完成工作。等待while循环将阻止UI线程,应用程序将冻结(android.app.Notification)。您应该研究消息处理并将变量的值传递给主线程。看看你的应用程序是什么?一个加热器?,android.app.Notification)您应该研究消息处理并将变量的值传递给主线程。看看你的应用程序是什么?加热器?