Pergunta

Até agora, tenho uma aula para um serviço local simples. O que eu quero fazer é enviar solicitações Para este serviço local de diferentes atividades no meu aplicativo. Dependendo dos parâmetros dessas solicitações, o serviço se conectará via HTTPClient a um servidor da web e receberá um JsonObject e o devolverá à atividade. Toda a comunicação HTTP já está funcionando dentro da minha atividade, mas eu gostaria que execute em um tópico separado no meu serviço local agora.

O código -fonte do meu serviço local muito simples se parece com isso até agora:

// BackgroundService.java
package com.test.localservice;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class BackgroundService extends Service
{
    @Override
    public void onCreate() {
        super.onCreate();
        Log.i("BackgroundService", "onCreate()");
        Thread thr = new Thread(null, new RunThread(), "BackgroundService");
        thr.start();
    }
    class RunThread implements Runnable
    {
        public void run() {
            Log.i("BackgroundService", "run()");

            /* Here the HTTP JSON communication is going to happen */

            //BackgroundService.this.stopSelf();
        }
    }
    @Override
    public void onDestroy()
    {
        Log.i("BackgroundService", "onDestroy()");
        super.onDestroy();
    }

    @Override
    public void onStart(Intent intent, int startId) {
        Log.i("BackgroundService", "onStart()");
        super.onStart(intent, startId);
    }
    @Override
    public IBinder onBind(Intent intent) {
        Log.i("BackgroundService", "onBind()");
        return null;
    }

}

O problema que estou enfrentando agora (devido à falta de conhecimento) é a parte da comunicação Atividades <-> Serviço local. Encontrei alguns exemplos de comunicação e troca de objetos para um Serviço remoto usando AIDL (Android Interface definitivamente idioma). No entanto, não tenho certeza se tenho que seguir esse caminho. Eu simplesmente gostaria de trocar meus próprios objetos definidos ou se isso não for possível, apenas um JsonObject ou se isso facilitará as coisas, mesmo apenas matrizes simples de strings funcionariam (por enquanto).

Alguém pode me apontar na direção certa e, se possível, dar um exemplo simples de uma troca de objetos (de ambos os lados) com um serviço local.

Desde já, obrigado.

Foi útil?

Solução

Eu sugiro usar um AsyncTask em vez de seu próprio tópico nesse cenário.

Para dar uma atividade uma referência ao seu BackgroundService Objeto, suas opções são:

  1. Use um singleton (ou seja, faça o seu BackgroundService objeto disponível em um contexto estático, como um membro público de dados estático, anulando essa referência estática em onDestroy()).

  2. Segue o LocalServiceBinding Amostra da API para devolver um IBinder isso simplesmente dá acesso ao BackgroundService objeto.

A partir daí, tudo está na mesma JVM, para que você possa passar objetos. Tenha cuidado, porém, para não segurar nada além da vida útil do componente (por exemplo, Activity não deve armazenar em cache o singleton).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top