例子:BlackBerry真正的后台运行程序,Task里面看不到的哦

本文详细介绍了如何通过自动运行后台线程,实现定时任务的日志记录与系统事件监听,包括地理定位变化、网络连接状态等。主程序与后台线程均使用了extendsApplication,确保了系统的高效运行与资源优化。

说明:
1.BlackBerry_App_Descriptor.xml设置程序为Auto-run on startup,Do not display the application icon on the BlackBerry home screen

2.手机开机后自动运行 BackgroundApplication

3.主程序BackgroundApplication的main中,执行BackgroundThread.waitForSingleton().start();启动后台线程

4.BackgroundThread也是extends Application,里面有个Thread在后面运行,这里是死循环,该或者监听push数据或者其他系统事件--地理位置变化/手机radio网络连接等等。这里是每隔5秒钟在手机日志里面写点东西。

5.注意主程序和线程程序都是 extends Application

6.要弹出窗口,必须调用 invokeLater( new Runnable() {

提示:

核心是要extends Application

但是我并不清楚是否主程序和线程程序都需要extends Application

细节还需要揣摩和试验,同志尚需努力,呵呵。周末愉快!

/******************************************************************************************/
主程序:

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

class BackgroundApplication extends Application {
public static void main(String[] args) {
BackgroundThread.loggerInit();
BackgroundThread.log("main() loggerInit");
BackgroundThread.waitForSingleton().start();
}

public BackgroundApplication() {
}
}

/******************************************************************************************/
后台运行程序:

class BackgroundThread extends Application {
public static String appName = "BackgroundThread";
public static long GUID = 0xcf891935c91e1987L;
private ListenerThread myThread;

public BackgroundThread() {
myThread = new ListenerThread();
}

/******************************************************************************************
* BackGround waitForSingleton() - returns an instance of a listening thread
******************************************************************************************/
public static BackgroundThread waitForSingleton(){
log("waitForSingleton");
//make sure this is a singleton instance
RuntimeStore store = RuntimeStore.getRuntimeStore();
Object o = store.get(GUID);
if (o == null){
log("inited");
store.put(GUID, new BackgroundThread());
return (BackgroundThread)store.get(GUID);
} else {
return (BackgroundThread)o;
}
}

/******************************************************************************************
* start() - starts the custom listen thread
******************************************************************************************/
public void start(){
invokeLater(new Runnable() {
public void run() {
myThread.start();
}
});

this.enterEventDispatcher();
}
/******************************************************************************************
* customer listening thread that is an extention of thread()
******************************************************************************************/
class ListenerThread extends Thread {

public void run() {
log("ListenerThread running");
for(int i=0;true;i++) {
try {
sleep(30000);
} catch (InterruptedException e) {
e.printStackTrace();
}
log("ListenerThread sleep 7 seconds");

log("ListenerThread sleep 1a");

invokeLater( new Runnable() {
public void run()
{
//InfoPopupScreen _screen = new InfoPopupScreen();
Dialog _screen = new Dialog(Dialog.D_OK_CANCEL, "关闭我", Dialog.D_OK, Bitmap.getPredefinedBitmap(Bitmap.QUESTION), Manager.VERTICAL_SCROLL);
Ui.getUiEngine().pushGlobalScreen(_screen, 1, UiEngine.GLOBAL_MODAL); //GLOBAL_MODAL would block
}
} );
}
}
}
/******************************************************************************************/
public static void loggerInit() {
EventLogger.register(GUID, appName, EventLogger.VIEWER_STRING);
log("LoggerInited");
}

public static void log(String value) {
EventLogger
.logEvent(GUID, value.getBytes(), EventLogger.ALWAYS_LOG);
}

}

/******************************************************************************************/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值