Frage

Ich lese Blackberry - Wie man den Hintergrund Bewerbungsverfahren erhalten id aber ich bin nicht sicher, ob ich es richtig verstehen. Der folgende Code wird den Vordergrund Prozess-ID;

ApplicationManager.getApplicationManager().getForegroundProcessId()

Ich habe zwei Prozesse, die das gleiche Stück Code ausführen, um eine Verbindung herzustellen, mag ich den Prozess protokollieren, die die Anrufe zusammen mit allen meinen üblichen Protokolldaten aus einer besseren Vorstellung davon zu bekommen, wie der Fluss arbeitet.

Ist es möglich, die ID für den Prozess zu erhalten, die zur Zeit den Code ausgeführt wird? Ein Prozess ist im Vordergrund (UI-Prozess) und der andere im Hintergrund, aber beide die gleiche Verbindungsbibliothek über die Laufzeitspeicher geteilt.

Vielen Dank im Voraus!

Gav

War es hilfreich?

Lösung

Sie haben also drei Module:. Anwendung, Bibliothek und Service
Sie müssen Beschreiber von Modulnamen, und dann Prozess-ID zu erhalten.

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]);
}

Dann einzuloggen, welches Modul verwendet Bibliothek verwenden

Application.getApplication().getProcessId();

innerhalb Bibliothek Methoden. Ich denke, es ist besser, die Protokollierung innerhalb Bibliothek zu implementieren.
Wenn Sie Prozess-ID der Anwendung von Bibliotheks-Code erhalten haben, können Sie es mit ids von Modulnamen gefunden vergleichen und dann wissen Sie, welche Modulbibliothek Code verwendet.
UPDATE2
alt text http://img138.imageshack.us/img138/23/eventlog.jpg
Bibliotheksmodul Code:

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;
    }
}

Anwendungsmodul Code:

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);
    }
}

Servicemodul Code:

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();
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top