Domanda

Blackberry - Come ottenere il processo di applicazione di fondo id ma non sono sicuro di aver capito correttamente. Il codice seguente ottiene il processo in primo piano id;

ApplicationManager.getApplicationManager().getForegroundProcessId()

Ho due processi che eseguono lo stesso pezzo di codice per effettuare una connessione, voglio registrare il processo che ha reso le chiamate insieme a tutti i miei soliti dati di registrazione per ottenere una migliore idea di come il flusso è in funzione.

E 'possibile ottenere l'ID per il processo che è attualmente in esecuzione il codice? Un processo è in primo piano (processo di UI) e l'altro è in background, ma entrambi utilizzano la stessa libreria connessione condivisa tramite il negozio di runtime.

Grazie in anticipo!

Gav

È stato utile?

Soluzione

In modo da avere tre moduli:. Applicazione, biblioteca e servizi
È necessario per ottenere descrittore dal nome del modulo, e quindi ottenere processo id.

Update1

String moduleName = "application";
int handle = CodeModuleManager.getModuleHandle(moduleName);
ApplicationDescriptor[] descriptors = CodeModuleManager
.getApplicationDescriptors(handle);
if (descriptors.length > 0 && descriptors[0] != null) {
    ApplicationManager.getApplicationManager().getProcessId(descriptors[0]);
}

Poi, per registrare quale modulo utilizza la libreria, usare

Application.getApplication().getProcessId();

all'interno metodi di libreria. Credo che il suo meglio per implementare la registrazione all'interno della libreria.
Quando si ha l'identificazione trattata di applicazione dal codice della libreria, si può confrontare con id trovate da nome del modulo e poi si sa quale modulo utilizza il codice della libreria.
UPDATE2
alt text http://img138.imageshack.us/img138/23/eventlog.jpg
Codice modulo di libreria:

package library;

import net.rim.device.api.system.Application;
import net.rim.device.api.system.ApplicationDescriptor;
import net.rim.device.api.system.ApplicationManager;
import net.rim.device.api.system.CodeModuleManager;
import net.rim.device.api.system.EventLogger;

public class Logger {
    // "AppLibSrvc" converted to long
    long guid = 0xd4b6b5eeea339daL;

    public Logger() {
        EventLogger.register(guid, "AppLibSrvc", EventLogger.VIEWER_STRING);
    }

    public void log(String message) {
        EventLogger.logEvent(guid, message.getBytes());
    }

    public void call() {
        log("Library is used by " + getModuleName());
    }

    private String getModuleName() {
        String moduleName = "";
        String appModuleName = "application";
        int appProcessId = getProcessIdByName(appModuleName);

        String srvcModuleName = "service";
        int srvcProcessId = getProcessIdByName(srvcModuleName);

        int processId = Application.getApplication().getProcessId();

        if (appProcessId == processId)
            moduleName = appModuleName;
        else if (srvcProcessId == processId)
            moduleName = srvcModuleName;
        return moduleName;
    }

    protected int getProcessIdByName(String moduleName) {
        int processId = -1;
        int handle = CodeModuleManager.getModuleHandle(moduleName);
        ApplicationDescriptor[] descriptors = CodeModuleManager
                .getApplicationDescriptors(handle);
        if (descriptors.length > 0 && descriptors[0] != null) {
            processId = ApplicationManager.getApplicationManager()
                    .getProcessId(descriptors[0]);
        }
        return processId;
    }
}

codice del modulo di applicazione:

package application;

import java.util.Timer;
import java.util.TimerTask;

import library.Logger;

import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.container.MainScreen;

public class App extends UiApplication {

    public App() {
        pushScreen(new Scr());
    }

    public static void main(String[] args) {
        App app = new App();
        app.enterEventDispatcher();
    }
}

class Scr extends MainScreen {
    public Scr() {
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            public void run() {
                Logger logger = new Logger();
                logger.call();
            }
        };
        timer.schedule(task, 3000, 3000);
    }
}

Codice modulo di servizio:

package service;

import java.util.Timer;
import java.util.TimerTask;

import library.Logger;
import net.rim.device.api.system.Application;

public class App extends Application {

    public App() {
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            public void run() {
                Logger logger = new Logger();
                logger.call();
            }
        };
        timer.schedule(task, 3000, 3000);
    }

    public static void main(String[] args) {
        App app = new App();
        app.enterEventDispatcher();
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top