Tag: process

Process incoming data (queue overflow)

When you develop applications for the BlackBerry smartphone, any network communication or lengthy data processing should be performed in its own thread. This is easy to realize for network input/output (I/O) because network connections must be initiated in their own thread, otherwise a deadlock situation may occur.[1]

When an application performs lengthy processing on the main event thread, the BlackBerry smartphone user can perceive the application to be slow because it is unable to process input commands. In an extreme situation, the application can close if it blocks or ties up the main event thread. If an application ties up the main event thread, the system is unable to dispatch messages to it (for example, BlackBerry smartphone user input, UI updates or network I/O). If the application message queue exceeds its limit, the application is terminated with the one of the following errors[2]:

Process [application name] killed due to message queue overflow


Uncaught Exception: [ApplicationName] is not responding; process terminated

An application is blocking the main event thread.

The main event thread processes system messages. Blocking this thread prevents system messages from being processed and can lead to a message queue overflow.

Because there is a finite amount of storage space for messages, the issue is caused when these messages are not being processed. If an application stops processing messages for a long period of time, the system assumes that the application has stopped responding and is no longer functioning as expected. This is the reason why the process was terminated.

Move long processes or processes that block to a separate background thread.

Application stops responding when opening a connection[3]

Flow of what is occurring

  • Application opens connection
  • UI pushing dialog box to the foreground
  • BlackBerry is now locked

Flow of what should occur

  • Application places a connection into a thread
  • Application runs the connection in a thread off of the main event thread
  • UI pushes dialog box to the foreground and thread execution is currently paused
  • User is notified of connection and accepts
  • System returns execution to the connection thread

[1] http://www.blackberry.com/knowledgecenterpublic/livelink.exe/fetch/2000/348583/800451/800563/How_To_-_Process_incoming_data.html?nodeid=1162112&vernum=0
[2] http://www.blackberry.com/knowledgecenterpublic/livelink.exe/fetch/2000/348583/800451/800783/Support_-_Process_[ApplicationName]_killed_due_to_message_queue_overflow.html?nodeid=826932&vernum=0
[3] http://www.blackberry.com/knowledgecenterpublic/livelink.exe/fetch/2000/348583/796557/800451/800563/Support_-_My_Application_Hangs_When_Opening_a_Connection.html?nodeid=800455

Open a push listener connection

The BlackBerry Mobile Data Service is capable of pushing data to a third-party application so that data is always available to the user. There are two common scenarios in which a push connection would be opened[1]:

  • when an application runs
  • when the device starts and runs in the background
//run method from with a thread
public void run() {
     //For Background Listener threads it is import to add the delay
     //If the application starts and displays the “Allow Connection” dialogue
     //Before the home screen is available it’s possible to cause a UI lock
          try {
               Thread sleep(1000);
          } catch( Exception e ) {}
     //Just add an extra wait to ensure the device is fully up and running
     //the user is looking at the home screen
     try {
          Thread sleep(3000);
     } catch( Exception e ) {}

     StreamConnection stream = null;
     InputStream input = null;

     try {
               try {
                    System.out.printIn(‘eclBackgroundThread--ThreadRunning (just to be sure)”);
               } catch( Exception e ) {}
          synchronized(this) {
               //synchronize here so that we don’t end up creating a connection that is never closed
               //The URL will be http://: where  is the value that the push server also                needs
               //to use to post data
               _notify = (StreamConnectionNotifier)Connector open(URL);
               _connectionOpened = true;

          //NOTE: the following will block until data is received
          stream = _notify acceptAndOpen();
          input = stream.openInputStream();

          //Read the received data in from the stream and process it accordingly
     } catch (IOException ioex) {}

[1] http://www.blackberry.com/knowledgecenterpublic/livelink.exe/fetch/2000/348583/796557/800451/800662/How_To_-_Open_a_push_listener_connection.html?nodeid=1033505&vernum=0

  • Copyright © 1996-2010 vaks.in. All rights reserved.
    iDream theme by Templates Next | Powered by WordPress