¿Por qué otro servicio en la parte superior de IMarketBillingService?
-
28-10-2019 - |
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?
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");
}
}