Можно ли привязать действия к этому сервису, который работает в фоновом потоке и всегда работает?

1

Это мой первый вопрос о SO, я надеюсь, что этот вопрос не будет плохим.

У меня есть служба, она начинает работать, когда пользователь запускает приложение и работает до тех пор, пока пользователь не убьет его с помощью убийцы задач или выключит его устройство.

Эта служба имеет фоновый поток, который выполняет некоторую работу с данными. Мне нужно связать действия (от действий, а не от службы), а иногда (1-2 раза в 30 секунд) отправлять данные в связанные операции.

Структура моего сервиса:

public class myserv extends Service {
  public static boolean started=false;
  public class workwithdata extends Thread {
    @Override
    public synchronized void start() {
      super.start();
      //.. Not important.
    }
    @Override
    public void run() {
      if (running) return;
      while (true) {
        if(condition) mythread.sleep(30000);
        else {
          Object data = recieveMyData();
          if (!data.isEmpty()) {
            //.. Some work with recieved data, not important.
            sendDataToBindedActivities(data); //This is what I need.
          }
          mythread.sleep(10000);
        }
      }
    }
  }
  @Override
  public void onCreate() {
    super.onCreate();
    this.started=true;
    mythread = new workwithdata();
    mythread.start();
  }
}

Ну, я нашел один вопрос, но моя проблема имеет небольшие отличия: мне не нужно отправлять какие-либо данные в службу, мне нужно просто отправить некоторые данные во все связанные действия (какая служба вообще не знает).

Структура, которую я ищу:

public class myact extends Activity {
  @Override
  public void onCreate(Bundle bun) {
    super.onCreate(bun);
    if(!myserv.started) {
      Intent service = new Intent(getApplicationContext(), myserv.class);
      getApplicationContext().startService(service);
    }
    bindToService(this);
  }
  @Override
  public void onRecievedData(Object data) {
    //work with recieved data from service "myserv".
  }
}

Я также пытался найти некоторые решения в документации по Android, но я не нашел то, что мне нужно.

Итак, главный вопрос: возможно ли работать с сообщениями от службы к действиям? , Если нет: что я должен использовать для этой цели? Если да, просто, извините, я могу попросить некоторые имена кода или класса, потому что я пытался найти и не...

Спасибо.

  • 0
    developer.android.com/guide/topics/fundamentals/...
  • 0
    так что именно вы хотите, чтобы отправлять некоторые данные для всех связанных действий через ваш сервис?
Показать ещё 3 комментария
Теги:
android-activity
android-service
android-intent

1 ответ

0
Лучший ответ

Вам необходимо использовать RemoteCallbackList

Когда ваши клиенты свяжутся с сервисом, вам необходимо зарегистрировать их с помощью RemoteCallbackList.register().

Когда вы хотите отправлять данные связанным клиентам, вы делаете что-то вроде этого:

int count = callbackList.beginBroadcast();
for (int i = 0; i < count; i++) {
    try {
        IMyServiceCallback client = callbackList.getBroadcastItem(i);
        client.onRecievedData(theData); // Here you callback the bound client method
                                  //  onRecievedData() and pass "theData" back
    } catch (RemoteException e) {
        // We can safely ignore this exception. The RemoteCallbackList will take care
        //  of removing the dead object for us.
    } catch (Exception e) {
        // Not much we can do here except log it
        Log.e("while calling back remote client", e);
    }
}
callbackList.finishBroadcast();

Пример можно найти здесь. Это довольно сложно, но, возможно, вам не нужно все, что это предлагает. В любом случае, посмотрите.

  • 0
    Можно ли отрицать, что не привязывает действия приложения к моему сервису?
  • 0
    Да. Вы можете запретить доступ других приложений к вашему сервису, используя <android: export = "false"> в теге <service> в манифесте.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню