Android 启动安卓服务后,是否可以立即在while循环中等待?
长话短说,我启动一个服务,在服务内部初始化一个静态变量,然后在主线程中等待这个静态变量被设置。所以我测试了它,它被卡住了(就像永远在while循环中一样),它开始让我觉得这是不可能的。我的逻辑是,服务作业被放入要执行的主线程队列中,但它尚未启动,它将只在当前主线程作业完成之前启动,并且服务作业只能在之后启动。所以我觉得这是不可能的。这是正确的逻辑吗?下面是代码Android 启动安卓服务后,是否可以立即在while循环中等待?,android,service,Android,Service,长话短说,我启动一个服务,在服务内部初始化一个静态变量,然后在主线程中等待这个静态变量被设置。所以我测试了它,它被卡住了(就像永远在while循环中一样),它开始让我觉得这是不可能的。我的逻辑是,服务作业被放入要执行的主线程队列中,但它尚未启动,它将只在当前主线程作业完成之前启动,并且服务作业只能在之后启动。所以我觉得这是不可能的。这是正确的逻辑吗?下面是代码 Intent exampleIntent = new Intent(this, Example.class); startService
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)您应该研究消息处理并将变量的值传递给主线程。看看你的应用程序是什么?加热器?