81 votes

Android - Quand inscrire / désinscrire des récepteurs de diffusion créés dans une activité?

J'ai besoin de créer un récepteur de radiodiffusion de l'événement onCreate de l'activité et, évidemment, j'ai besoin d'annuler l'inscription du récepteur de radiodiffusion de l'événement onDestroy de l'activité

Pour plus de clarté ceci est un extrait de code que j'utilise

public class AnActivity extends Activity {
    private ResponseReceiver receiver;

    public class ResponseReceiver extends BroadcastReceiver {
           public static final String ACTION_RESP =
              "mypackagename.intent.action.MESSAGE_PROCESSED";

           @Override
            public void onReceive(Context context, Intent intent) {
// TODO Start a dialogue if message indicates successfully posted to server
            }
    }   

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

        IntentFilter filter = new IntentFilter(ResponseReceiver.ACTION_RESP);
        filter.addCategory(Intent.CATEGORY_DEFAULT);
        receiver = new ResponseReceiver();
        registerReceiver(receiver, filter);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }

J'ai lu que onPause/onResume et démarrage/onStop événements pour l'activité devrait également enregistrer et désenregistrer le récepteur de radiodiffusion.

Je suis vraiment vouloir comprendre ce qui est considéré comme la meilleure pratique pour cela et pourquoi.

92voto

SnowyTracks Points 894

Vous devez vous inscrire et se désinscrire de vos destinataires onResume() et onPause().

La seule raison pour laquelle une Activité de registre BroadcastReceivers est d'utiliser les événements d'une certaine façon sur l'activité en cours, afin d'informer l'Utilisateur d'un événement. Si onPause() a été appelée, l' Activity n'est plus au premier plan, et, par conséquent, cant mise à jour de l'Utilisateur.

Si vous souhaitez recevoir des événements de diffusion dans le fond, vous devriez envisager d'utiliser un service comme indiqué ici.

Comme Konstantin dit, onDestroy() n'est pas garantie d'être appelé, et vous pourriez continuer à recevoir des émissions pendant une longue période, lorsque l' Activity n'est plus ouverte.

19voto

Comme onDestroy () n'est pas garanti d'être appelé, vous devez utiliser onPause () pour annuler l'enregistrement. Considérez le cycle de vie de votre récepteur de radiodiffusion: avez-vous besoin qu'il soit actif, uniquement lorsque votre activité est au premier plan? Ensuite, utilisez onResume () / onPause ()

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