Domanda

Google's Esempio Market_Billing, proprio come gli altri come Questo, si collega al file a distanza servizio IMarketBillingService attraverso un Locale Wrapper di servizio, BillingService.

Capisco che i servizi hanno il vantaggio di fare le cose in background, ma non è il telecomando IMarketBillingService abbastanza?

Qual è il vantaggio di aggiungere un altro livello a questa cipolla?

Cosa perderò se provo a connettermi al telecomando IMarketBillingService direttamente dalla mia attività principale, nel thread dell'interfaccia utente?

Se non è consigliabile connettersi al telecomando IMarketBillingService direttamente nel thread dell'interfaccia utente, può il locale BillingService essere sostituito con solo un altro thread nell'attività principale?

È stato utile?

Soluzione

Il BillingService locale gestisce i callback dall'IMarketBillingservice quando la tua attività non è in esecuzione.

Il riferimento ( http://developer.android.com/reference/android/app/activity.html) dice:

"Se un'attività viene messa in pausa o fermata, il sistema può far cadere l'attività dalla memoria chiedendole di finire o semplicemente uccidendo il suo processo. Quando viene visualizzata di nuovo all'utente, deve essere completamente riavviato e ripristinato allo stato precedente . "

Se ad esempio invochi una richiesta di fatturazione Restore_Transactions, le risposte dal servizio di mercato Android potrebbero richiedere del tempo per arrivare. Utilizzando un servizio, sai che sarai sempre in giro per gestire le risposte, indipendentemente dal ciclo di vita delle attività.

Solo per divertimento, ho provato a scrivere un piccolo app di prova ed ero sicuro. Un thread in esecuzione può chiamare metodi su un'attività pausa o fermata. Il thread può anche modificare l'interfaccia utente anche quando l'attività non è in primo piano. Esegui la seguente applicazione, premere la schermata Home per arrestare l'app. Torna indietro dopo 10 secondi e vedi che il TextView è cambiato ...

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");
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top