14 votes

BroadcastReceiver comme classe interne

Je sais que le BroadcastReceiver ne peut pas être utilisé s'il est défini comme classe interne d'Activity. Mais je me demande pourquoi ? Est-ce parce que le système devrait instancier une grosse classe Activity pour avoir simplement instancié une instance de récepteur ?

27voto

Bert F Points 27237

... parce que le système devrait instancier un grand objet Activity pour avoir simplement instancié une instance de récepteur ?

Oui, comme toute autre classe interne non statique. Elle doit obtenir une instance de la classe externe de quelque part (par exemple, en l'instanciant ou par un autre mécanisme) avant de pouvoir créer une instance de la classe interne (non statique).

Les récepteurs de diffusion globale qui sont invoqués à partir d'intentions dans le fichier manifeste et qui seraient instanciés automatiquement par le système n'ont pas d'instance externe à utiliser pour créer une instance de la classe interne non statique du récepteur de diffusion. Ceci est indépendant de la classe externe, qu'elle soit Activity ou non.

Toutefois, si vous utilisez un récepteur dans le cadre d'une activité, vous pouvez instancier manuellement un récepteur de diffusion dans l'activité (pendant l'un des rappels de l'activité, vous disposez d'une instance de la classe externe pour travailler : this ), puis l'enregistrer ou le désenregistrer comme il convient :

public class MyActivity extends Activity {

    private BroadcastReceiver myBroadcastReceiver =
        new BroadcastReceiver() {
            @Override
            public void onReceive(...) {
                ...
            }
       });

    ...

    public void onResume() {
        super.onResume();
        ....
        registerReceiver(myBroadcastReceiver, intentFilter);
    }

    public void onPause() {
        super.onPause();
        ...
        unregisterReceiver(myBroadcastReceiver);
    }
    ...
}

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