首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android环境下的服务管理

Android环境下的服务管理
EN

Stack Overflow用户
提问于 2017-01-18 05:14:20
回答 1查看 118关注 0票数 0

我正处于为Android编写一个基于转弯的游戏的初期阶段。目前,我正计划把它变成单人游戏,玩家与AI对抗。这将是一个相当复杂的游戏,而且由于它是基于回合的,所以在玩家每次回合之后都要做大量的计算和工作(AI的每个人都必须计算和“轮流”)。目前,我的想法是在service中完成所有这些工作。一旦玩家的回合结束,应用程序的主要活动将创建一个新的服务。该服务将完成AI的所有计算(在一个独立的线程中与主活动),并且主活动将显示一些加载动画,表明AI玩家正在“思考”。

我想采用这种方法的原因是,如果用户在AI还在“轮到他们”的时候关闭应用程序,即使主要的活动被系统杀死,服务仍然能够完成所有的计算。

我还在整理很多细节,但我遇到了几个问题。假设用户结束他们的回合,创建并启动服务,当服务运行愉快时,用户关闭应用程序,应用程序的主要活动被系统破坏,然后用户决定再次打开应用程序。当应用程序打开时,需要发生以下情况:

  • 主要活动需要检查和查看服务是否仍在运行,如果是.
  • 一旦服务完成了它的工作,它需要告诉主活动(只要用户重新打开应用程序并且主活动正在运行),它在被销毁之前已经完成了。

因此,我有以下问题:

  1. 是否有办法让我的活动检查服务是否仍在运行?
  2. 服务是否有一种方法可以告诉主活动已经完成,而不需要主活动进行投票?

*我看到了一些类似问题的答案,建议使用全局变量,但由于无数教授和同事一次又一次地告诉我尽量避免全局变量,我正在努力寻找一个更优雅的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-18 05:31:37

是否有办法让我的活动检查服务是否仍在运行?

下面是我找到的解决方案之一

代码语言:javascript
复制
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

代码语言:javascript
复制
LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent("SERVICE_STOPPED"))

Activity

代码语言:javascript
复制
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"));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41711838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档