我正处于为Android编写一个基于转弯的游戏的初期阶段。目前,我正计划把它变成单人游戏,玩家与AI对抗。这将是一个相当复杂的游戏,而且由于它是基于回合的,所以在玩家每次回合之后都要做大量的计算和工作(AI的每个人都必须计算和“轮流”)。目前,我的想法是在service中完成所有这些工作。一旦玩家的回合结束,应用程序的主要活动将创建一个新的服务。该服务将完成AI的所有计算(在一个独立的线程中与主活动),并且主活动将显示一些加载动画,表明AI玩家正在“思考”。
我想采用这种方法的原因是,如果用户在AI还在“轮到他们”的时候关闭应用程序,即使主要的活动被系统杀死,服务仍然能够完成所有的计算。
我还在整理很多细节,但我遇到了几个问题。假设用户结束他们的回合,创建并启动服务,当服务运行愉快时,用户关闭应用程序,应用程序的主要活动被系统破坏,然后用户决定再次打开应用程序。当应用程序打开时,需要发生以下情况:
因此,我有以下问题:
*我看到了一些类似问题的答案,建议使用全局变量,但由于无数教授和同事一次又一次地告诉我尽量避免全局变量,我正在努力寻找一个更优雅的解决方案。
发布于 2017-01-18 05:31:37
是否有办法让我的活动检查服务是否仍在运行?
下面是我找到的解决方案之一
private boolean isMyServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}它循环遍历所有正在运行的服务,如果找到服务,则返回true。
服务是否有一种方法可以告诉主活动已经完成,而不需要主活动进行投票?
为此,您可以使用LocalBroadcastManager。当服务即将停止从服务发送LocalBroadcast并侦听所需的Activity中的LocalBroadcastManager时
在Service中
LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent("SERVICE_STOPPED"))在Activity中
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override public void onReceive(Context context, Intent intent) {
//task to do on service stop event
}
};
LocalBroadcastManager.getInstance(context).registerReceiver(broadcastReceiver, new IntentFilter("SERVICE_STOPPED"));https://stackoverflow.com/questions/41711838
复制相似问题