Java 在Android中管理服务
我正处于为Android编写基于回合的游戏的开始阶段。目前,我打算让它成为单人游戏,玩家可以和AI游戏。这将是一个相当复杂的游戏,因为它是基于回合的,玩家每次回合后都要做大量的计算和工作(AI的每个人都要计算并“轮到他们”)。我现在很乐意在Java 在Android中管理服务,java,android,android-activity,android-service,Java,Android,Android Activity,Android Service,我正处于为Android编写基于回合的游戏的开始阶段。目前,我打算让它成为单人游戏,玩家可以和AI游戏。这将是一个相当复杂的游戏,因为它是基于回合的,玩家每次回合后都要做大量的计算和工作(AI的每个人都要计算并“轮到他们”)。我现在很乐意在服务中完成所有这些工作。一旦玩家结束回合,应用程序主活动将创建一个新服务。该服务将完成AI的所有计算(在主活动的单独线程中),主活动将显示一些加载动画,表明AI玩家正在“思考” 我之所以想采用这种方法,是因为如果用户在AI仍在“轮到他们”的时候关闭应用程序,即
服务中完成所有这些工作。一旦玩家结束回合,应用程序主活动将创建一个新服务。该服务将完成AI的所有计算(在主活动的单独线程中),主活动将显示一些加载动画,表明AI玩家正在“思考”
我之所以想采用这种方法,是因为如果用户在AI仍在“轮到他们”的时候关闭应用程序,即使主要活动被系统终止,服务仍能完成所有计算
我还在整理很多细节,但我遇到了一些问题。考虑用户结束服务的情况,创建和启动服务,而当服务愉快运行时,用户关闭应用程序,应用程序的主要活动被系统破坏,然后用户决定再次打开应用程序。当应用程序打开时,需要执行以下操作:
- 主要活动需要检查并查看服务是否仍在运行,以及是否
- 一旦服务完成其工作,它需要告诉主活动(前提是用户重新打开应用程序且主活动当前正在运行),在销毁之前它已完成
因此,我有以下问题:
我的活动是否有办法检查并查看服务是否仍在运行*
是否有一种方法可以让服务告诉主活动它已经完成,而不必轮询主活动
*我已经看到一些类似问题的答案,建议使用全局变量,但由于无数教授和同事一再告诉我要尽可能避免使用全局变量,我正在尝试看看是否有更优雅的解决方案
我的活动是否有办法检查并查看服务是否仍在运行*
下面是我找到的解决方案之一
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;
}
在活动中
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"));
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"));