Registrar un servicio de escucha PersistentContentListener

En la mayoría de los casos, para registrar un servicio de escucha con protección de contenido debe llamar a PersistentContent.addListener(). El método addListener() registra un servicio de escucha constante de contenido mediante una referencia intensa al servicio de escucha proporcionado, de forma que no se recoja como dato desechable.

Si sólo desea registrar una referencia débil al servicio de escucha de protección de contenido, puede registrar el servicio de escucha a través del marco de protección de contenido, haciendo uso de PersistentContent.addWeakListener(). Si el Smartphone que ejecuta su aplicación se reiniciar, su aplicación tendrá que invocar addWeakListener() otra vez.

Ejemplo de código

En algunos casos, puede que desee registrar su servicio de escucha PersistentContentlistener cuando la aplicación se inicie por primera vez. En el siguiente ejemplo de código, la aplicación registra un servicio de escucha PersistentContentListener al iniciarse el smartphone BlackBerry, en caso de que no se pase ningún argumento a la aplicación o de que se especifique el argumento de inicio. El servicio de escucha detecta los cambios de configuración de la protección de contenido y de compresión del smartphone, además de los cambios de estado de contenido constantes. El ejemplo de código inicia la parte de la interfaz gráfica de la aplicación en caso de que se especifiquen los argumentos y el inicio no haya sido enumerado como el primer argumento.

final class PersistentStoreListener implements PersistentContentListener
{
    public void persistentContentStateChanged(int state)
    {
        // There is nothing to do. It is assumed that data is encoded properly
        // when it is placed in the Vector written to the persistent store.
    }
    // Called when the smartphone's Content Protection/Compression security settings
    // are changed. Re-encodes the data accordingly.
    public void persistentContentModeChanged(int generation)
    {
        PersistentObject persist = PersistentStore.getPersistentObject(
        PersistentStoreDemo.PERSISTENT_STORE_DEMO_ID);
        if (persist != null)
        {
            synchronized(persist.getContents())
            {
                Vector meetings = (Vector) persist.getContents();
                if (meetings == null)
                {
                    // Contents empty; nothing to re-encode.
                    return;
                }
                // Get a ticket in case we need to decrypt data as
                // part of re-encoding data.
                Object ticket = PersistentContent.getTicket();
                if (ticket == null )
                {
                    // No ticket is available. We need to stop trying
                    // to re-encode to avoid possible failures.
                    return;
                }
                for (int i = 0; i < meetings.size(); ++i)
                {
                    Meeting meeting = (Meeting)meetings.elementAt( i );
                    // meeting.reEncode();
                    // meeting object contains a _fields Vector.
                    for (int i = 0; i < meeting.NUM_FIELDS; ++i)
                    {
                        Object encoding = meeting._fields.elementAt(i);
                        if(!PersistentContent.checkEncoding(encoding))
                        {
                            encoding = PersistentContent.reEncode(encoding);
                            meeting._fields.setElementAt(encoding, i);
                        }
                    }
                    if ( generation != PersistentContent.getModeGeneration() )
                    {
                        // The smartphone's content protection or compression
                        // settings have changed again since the listener was
                        // last notified. Abort this re-encoding because it
                        // will have to be done again anyway according to the
                        // new content protection or compression settings.
                        break;
                    }
                }
                // Release the ticket.
                ticket = null;
                // Commit the updated data to the persistent store.
                persist.commit();
            }
        }
    }
}
Tema siguiente: Codificar un objeto

¿Le ha resultado útil esta información? Envíenos sus comentarios.