2017-01-18 14 views
0

Я нахожусь на начальных этапах написания пошаговой игры для Android. В настоящее время я планирую, что это будет один игрок, где игрок играет против AI. Это будет довольно сложная игра, и, поскольку она пошаговая, многие вычисления и работа должны быть выполнены после каждого поворота игрока (каждый из AI должен вычислить и «повернуть»). В настоящее время я занимаюсь идеей делать все, что работает в service. Как только игрок закончит свою очередь, основное действие приложений создаст новую услугу. Служба выполнит все вычисления для ИИ (в отдельном потоке из основного Действия), а основная активность покажет некоторую анимацию загрузки, указывающую, что игроки AI «думают».Управление службами на Android

Причина, по которой я хочу воспользоваться этим подходом, заключается в том, что если пользователь закрывает приложение, в то время как ИИ все еще «в свою очередь», служба все равно сможет выполнять все вычисления, даже если основная деятельность убит системой.

Я все еще сглаживаю много деталей, но я столкнулся с несколькими вопросами. Рассмотрим случай, когда пользователь заканчивает свою очередь, служба создается и запускается, и пока служба работает успешно, пользователь закрывает приложение, основное действие приложения уничтожается системой, а затем пользователь решает открыть приложение еще раз. Когда приложение открывает следующие должно произойти:

  • Основное направление деятельности необходимо проверить и посмотреть, если служба по-прежнему работает, и если это ...
  • После того, как служба заканчивает свою работу, его необходимо сообщить основную деятельность (при условии, что пользователь снова открыл приложение, и основное действие в настоящее время выполняется), что оно завершено до его уничтожения.

Так что у меня следующие вопросы:

  1. Есть ли способ для моей деятельности, чтобы проверить и посмотреть, если служба по-прежнему работает *
  2. Есть ли способ для службы, чтобы сказать? основное действие, которое оно завершено, без основного участия в опросе?

* Я видел некоторые ответы на подобные вопросы, предлагающие использование глобальных переменных, но поскольку мне неоднократно говорили бесчисленные профессора и коллеги, чтобы избежать как можно большего числа глобальных переменных, я Я пытаюсь понять, есть ли более элегантное решение.

ответ

0

Есть ли способ для моей деятельности, чтобы проверить и посмотреть, если услуга все еще работает? *

Ниже один из решений я нашел

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, если вы нашли это объявление

Есть ли способ f или услугу, чтобы сообщить основную деятельность, что она закончена, без основного участия в опросе?

Для этого вы можете использовать LocalBroadcastManager.Когда служба собирается прекратить посылать LocalBroadcast от службы и слушать для LocalBroadcastManager в Activity вы хотите

В 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")); 

 Смежные вопросы

  • Нет связанных вопросов^_^