Почему связанные службы Android загружаются после фрагментов?

#android #android-fragments #android-activity #android-service #android-service-binding

#Android #android-фрагменты #android-активность #android-сервис #android-service-binding

Вопрос:

Мой вопрос точно такой, как указано в названии. Почему службы, привязанные к Android, всегда загружаются после завершения всего жизненного цикла фрагмента? Связанные службы предназначены для загрузки в действие, содержащее фрагмент, так почему же служба доступна только после создания фрагмента? Иногда я хочу использовать сервис для заполнения данных во фрагменте, и мне нужно было вернуться к «взломам», чтобы получить доступ к сервису.

Я загружаю подключения к службам в методе onCreate() в activity и запускаю службу в OnStart(), как описано в документации https://developer.android.com/guide/components/bound-services но затем я должен создать метод «загрузки» во фрагменте, чтобы загружать материал после завершения загрузки сервиса.

     private void loadServiceConnections()
    {
        metronomeConnection = new ServiceConnection()
        {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service)
            {
                MetronomeService.LocalBinder localBinder = (MetronomeService.LocalBinder) service;
                metronomeService = localBinder.getService();
                metronomeService.setLinkManager(notificationsMetronomeLinkManager);
                metronomeService.setListener(myFragment);
                metronomeFragment.onServiceLoading(); //this is the method that executes inside the fragment once the service is available.

                metronomeServiceIsBound = true;


                if (loaded amp;amp; metronomeService.isMetronomePlaying())
                    metronomeRunning = true;
            }

            @Override
            public void onServiceDisconnected(ComponentName name)
            {
                metronomeServiceIsBound = false;
            }
        };
}
 

Комментарии:

1. «связанные службы всегда загружаются после завершения всего жизненного цикла фрагмента?» — Обратные вызовы в ServiceConnection происходят независимо от Activity Fragment перехватов жизненного цикла or.

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

3. Спасибо, Павел! Итак, есть ли лучший способ вызвать метод внутри фрагмента, который зависит от службы?