Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.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
Java:陷入无限循环_Java_Android_Binary Semaphore - Fatal编程技术网

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()不能保证被调用