Pregunta

Google Muestra de mercado de mercado, al igual que otros como Éste, se conecta al remoto Servicio IMarketBillingService a través de un local envoltura de servicio, BillingService.

Entiendo que los servicios tienen la ventaja de hacer las cosas en segundo plano, pero no es el control remoto IMarketBillingService ¿suficiente?

¿Cuál es la ventaja de agregar otra capa a esta cebolla?

¿Qué perderé si intento conectarme al control remoto? IMarketBillingService directamente de mi actividad principal, en el hilo de la interfaz de usuario?

Si no es aconsejable conectarse al control remoto IMarketBillingService directamente en el hilo de la interfaz de usuario, ¿puede el local? BillingService ser reemplazado por solo otro hilo en la actividad principal?

¿Fue útil?

Solución

El BillingService local maneja las devoluciones de llamada desde el ImarketBillingService cuando su actividad no se está ejecutando.

La referencia ( http://developer.android.com/reference/android/app/activity.html) dice:

"Si una actividad se detiene o se detiene, el sistema puede eliminar la actividad de la memoria al pedirle que termine o simplemente matando su proceso. Cuando se muestra nuevamente al usuario, debe reiniciarse por completo y restaurarse a su estado anterior "

Si, por ejemplo, invoca una solicitud de facturación RESTORE_TRANSACTIONS, las respuestas del servicio de mercado de Android pueden tardar un tiempo en llegar. Al usar un servicio, sabe que siempre estará cerca para manejar las respuestas, independientemente del ciclo de vida de la actividad.

Solo por diversión, intenté escribir una pequeña aplicación de prueba y me impulsé. Un hilo en ejecución puede llamar a los métodos en una actividad detenida o detenida. El hilo también puede modificar su interfaz de usuario incluso cuando la actividad no está en primer plano. Ejecute la siguiente aplicación, presione la pantalla de inicio para detener la aplicación. Regrese después de 10 segundos y vea que la vista de texto ha cambiado ...

package com.example.playground;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class MyActivity extends Activity {

    private static String TAG = MyActivity.class.getName();

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Thread t = new Thread(new Runnable() {
            public void run() {
                try {
                    Thread.sleep(10000);
                    someMethod();
                } catch (InterruptedException e) {
                    Log.e(TAG, e.getMessage(), e);
                }
            }
        });
        t.start();
    }

    private void someMethod() {
        Log.d(TAG, "Some method called");
        TextView tv = (TextView) findViewById(R.id.textfield);
        tv.setText("Called later");
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top