Java:陷入无限循环
只有当我的服务完全停止时,我才想做一些事情 因此,我创建了一个公共静态变量,在Java:陷入无限循环,java,android,binary-semaphore,Java,Android,Binary Semaphore,只有当我的服务完全停止时,我才想做一些事情 因此,我创建了一个公共静态变量,在onCreate()中将其初始化为false,在onDestroy()中将其初始化为true,在onDestroy()中将其初始化为false 在我的活动中: if(TripService.trip_service_state) { stopService(newIntent(ProfileActivity.this,TripService.class)); while (TripService.trip_
onCreate()
中将其初始化为false,在onDestroy()中将其初始化为true,在onDestroy()中将其初始化为false
在我的活动中:
if(TripService.trip_service_state)
{
stopService(newIntent(ProfileActivity.this,TripService.class));
while (TripService.trip_service_state);
do_stuff();
}
为我服务:
public static boolean trip_service_state=false;
onCreate()
{
super.onCreate();
trip_service_state=true;
}
onDestroy()
{
trip_service_state=false;
super.onDestroy();
}
现在,当我的服务运行时,应用程序将收到不响应消息。由于服务
与活动
在同一线程上执行,因此无法执行将标志设置为false的代码:活动方法从不停止。这就是你得到ANR的原因
您可以改为通过LocalBroadcastManager
从服务
向活动
发送广播
。(活动必须动态注册和注销相应的BroadcastReceiver
)是否需要Do_stuff()代码>要在while循环之后或在其内部执行的函数?在while循环之后。我可以用一些简单的方法实现相同的功能吗?@Rajat Aggarwal-ummm,这是一种简单的方法。关键是您必须放弃一个组件(活动),以便另一个组件(服务)有机会完成其工作,并在完成后通知相关方。当然,你也可以在UI线程之外的其他线程中进行无限循环,但不知何故,我不太喜欢每隔几毫秒检查一次是否还有什么东西在那里——这是浪费能源。类似于为什么“推”比“拉”好。也可以使用LiveData。从架构的角度来看更好,但肯定不容易。还有一件事:Service.ondestory()不能保证被调用