2009-12-11 11 views
3

J'ai lu Blackberry - How to get the background application process id mais je ne suis pas sûr de le comprendre correctement. Le code suivant obtient l'ID du processus de premier plan;BlackBerry - Obtenir l'ID de processus actuel

ApplicationManager.getApplicationManager().getForegroundProcessId() 

J'ai deux processus qui exécutent le même morceau de code pour établir une connexion, je veux connecter le processus qui a fait les appels ainsi que toutes mes données habituelles d'exploitation forestière pour obtenir une meilleure idée de la façon dont le flux est travail.

Est-il possible d'obtenir l'ID pour le processus qui exécute actuellement le code? Un processus est au premier plan (processus d'interface utilisateur) et l'autre est en arrière-plan, mais les deux utilisent la même bibliothèque de connexions partagée via le magasin d'exécution.

Merci d'avance!

Gav

Répondre

4

Vous avez donc trois modules: application, bibliothèque et service.
Vous devez obtenir le descripteur par nom de module, puis obtenir l'ID du processus.

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

Ensuite, pour ouvrir une session qui utilise le module bibliothèque, utilisez

Application.getApplication().getProcessId(); 

à l'intérieur des méthodes de la bibliothèque. Je pense qu'il est préférable d'implémenter la journalisation à l'intérieur de la bibliothèque.
Lorsque vous avez reçu l'identifiant de processus d'application du code de la bibliothèque, vous pouvez le comparer avec les identifiants trouvés par le nom du module, puis vous saurez quel module utilise le code de la bibliothèque.
MAJ2
alt text http://img138.imageshack.us/img138/23/eventlog.jpg
code du module de bibliothèque:

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

Code module d'application:

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

Code module de service:

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(); 
    } 
} 
+1

C'est fantastique, je vous remercie mu ch! – gav