2 votes

Est-il possible d'envoyer des requêtes à un service en appelant ses fonctions publiques dans Android ?

J'ai un service dont la responsabilité est de télécharger des fichiers depuis Internet. Je dois pouvoir envoyer des demandes à mon service à partir de différentes classes, par exemple, à partir d'activités, de fragments ou de NotificationManager.

Quelle est la meilleure façon d'envoyer des demandes de téléchargement au service ? Dois-je envoyer les données via Intent ou est-il préférable d'accéder à la référence du service et d'appeler l'une de ses fonctions publiques ? Laquelle est la meilleure ? Merci.

1voto

Adebayo Jagunmolu Points 166

Je dirais que ça dépend. Si tout ce dont vous avez besoin est de donner au service une tâche à effectuer et que vous ne voulez pas de réponse de sa part, alors vous devriez simplement envoyer l'information via une intention et l'oublier.

Si vous devez communiquer avec le service au sujet du téléchargement (progression, état du téléchargement, etc.), vous devez probablement vous lier au service (si vous utilisez une activité).

Si vous n'utilisez pas d'activité et que vous devez communiquer avec le service, vous pouvez implémenter la communication de plusieurs façons. Vous pouvez utiliser une interface d'événement où le service peut envoyer des événements à quiconque veut bien l'écouter, concernant la progression du téléchargement, les files d'attente et d'autres choses de ce genre. L'autre partie peut également envoyer des événements au service, ce qui peut inciter le service à répondre par un autre événement ou à effectuer une tâche. De cette façon, vous ne gardez pas une référence à un service qui peut être tué à tout moment par Android. Vous savez simplement que si vous envoyez un événement au service et que vous ne recevez pas de réponse, alors le service est mort (ou il ne veut tout simplement pas répondre).

1voto

prateek Points 392

Je recommande d'utiliser les Intents pour passer des informations et de ne pas conserver la référence du service pour appeler ses méthodes publiques.

1voto

Deepak Points 127

Je vous suggère d'utiliser WorkManager au lieu d'un service. Puisque les services peuvent être terminés par le système pour l'optimisation. ex.

     class DownloadWorker(appContext: Context, workerParams: WorkerParameters):
          Worker(appContext, workerParams) {
                override fun doWork(): Result {

               // Do the work here--in this case, upload the images.
                  downloadFile()

               // Indicate whether the work finished successfully with the Result
               return Result.success()
            }
          }

et vous pouvez commencer n'importe quel travail et plusieurs travaux avec des contraintes comme le réseau doit être connecté. comme ceci :

      /**
       * Constraints
       * Network type is conneted
       */
          mConstraints =new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build();

          mRequest = new OneTimeWorkRequest.Builder(DownloadWorker.class).setConstraints(mConstraints)
            .build();
WorkManager
.getInstance(myContext)
.enqueue(mRequest)

WorkManager assure l'exécution de votre travail.

Pour plus d'informations, consultez ce site : [WorkManager] : https://developer.Android.com/topic/libraries/architecture/workmanager/basics

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X