serviceblackberryblackberry-eclipse-pluginblackberry-jde

Best method to run a periodic background service in java blackberry


Objective: I want to develop an UI application that runs a service/ task/method periodically to update database. This service should start after periodically even if my application is not active/visible/user exits app. Similar to an Android Service .

I'm using BlackBerry Java 7.1 SDK eclipse plugin .

The options I came across are the following:

1) How to run BlackBerry application in Background

This link suggests that I extend Application instead of UIApplication. But I can't do that as my application has a user interface.

2) Make application go in background

I don't want my UI application to go in background, instead i just want my application to call the service periodically .

3) Run background task from MainScreen in BlackBerry?

This link suggests to run I a thread, but I don't think that if user exits my application then the thread will run in background

4) Blackberry Install background service from UI application?

This suggests using CodeModuleManager ,whose usage I'm unable to figure .

Please suggest what is the best way to achieve this objective or suggests any other better method .

I am new to blackberry so please pardon my ignorance.


Solution

  • To expand on Peter's Answer:

    1. You will need to create two classes :

      class BgApp extends Applicaton
      class UiApp extends UiApplication
      

      I guess you have already created the class that extends UiApplicaiton. So add another class that extends Application.

    2. Then create a class that extends TimerTask and implement its run method to call the method that updates the database.

      class UpdateDatabaseTask extends TimerTask
      
    3. In the BgApp constructor, create a Timer. And schedule the UpdateDatabaseTask using the schedule(TimerTask, long, long) method.

    4. Define alternate entry points, check the "Do not show on homescreen" and "auto run on startup" checkboxes for the bgapp's entry point.

    5. It is easiest and simplest to use the builtin persistence mechanism (PersistentStore and Persistable interface) for storing data. Even if you use any other means like RecordStore or SQLDb, both UiApp and BgApp can use access the same database. The values updated by the bgapp will be accessible by the uiapp and vice-versa, automatically.

    6. If you want to send a signal from bgapp to uiapp (for example when bgapp downloads new data you want the uiapp to reload the data instantaneously), post a Global Event (ApplicationManager.postGlobalEvent()) when the download is complete and listen for it in the screen that is displaying the data (GlobalEventListener interface).

    There are code samples for each of these available as part of the SDK or search on the internet and you'll find a lot of implementations.