私のブラックベリーアプリでは、別のエントリポイントを使用しており、http操作を実行するスレッドを実行しています。それはその操作を行いますが、問題はそれが私のコードですuu をハングアップされます。ブラックベリーのサービススレッドは、実行時にUIをハングします
final class sendUnsentService extends Thread {
Timer timer;
TimerTask repeatMe;
sendUnsentService me;
boolean working = false;
public boolean isWorking() {
return working;
}
public void interrupt() {
super.interrupt();
System.out.println("___________________________[STOPSERVICE()]");
try {
timer.cancel();
} catch (Exception e) {
System.out
.println("_______________________[PROBLEM STOPPING SERVICE]");
}
}
public void run() {
super.run();
System.out.println("___________________________[STARTSERVICE()]");
new Thread() {
public void run() {
timer.schedule(repeatMe, 0, 300000);
};
}.start();
}
public sendUnsentService() {
me = this;
ImageUtils.initPersistentStorage();
timer = new Timer();
repeatMe = new TimerTask() {
public void run() {
working = true;
if (sendUnsentActivity()) {
me.interrupt();
}
working = false;
}
};
}
私はこのコードを使用して、いくつかのユーザーとの対話にこのスレッドを呼び出していますし、それは、UI
try {
helloBerry.service = new sendUnsentService();
} catch (Exception e) {
System.out.println("_____________1 " + e);
}
try {
helloBerry.service.startService();
} catch (Exception e) {
System.out.println("_____________2 " + e);
}
をハングアップし、これは私が代替を使用してmainメソッドでは、デバイスの起動時に起動するようにサービスを呼び出す方法ですエントリポイント
if (args != null && args.length > 0 && args[0].equals("normal")) {
System.out.println("_________[STARTING APP]");
___________some code here to show a screen
}
} else {
System.out.println("_________[STARTING SERVICE]");
service = new sendUnsentService();
service.run();
}
RuntimeStoreを使って情報をバックグラウンドアプリに渡して処理するか、標準的な場所に保存する必要があるかもしれませんし、開始することがわかっているデータ送信。あなたが知っている限り、ユーザーがアプリケーションを終了すると、スレッドが強制終了されないようにすることはできません。代わりに、メイン画面のonClose()メソッドをオーバーライドして、転送がまだ進行中の場合はバックグラウンドにし、完了したら終了することもできます。 – jprofitt