私はこの質問に答えることが壁にジェロを釘付けするようなものになることを知っているので、私は最初から丁寧に謝っています。私はできるだけ多くの細部を与えますが、与えるべきことはあまりありません。ブラックベリーのアプリケーション開発 - アプリケーションが16-18時間後に動作しなくなる
GPSを使用してxx分ごとにユーザーの所在地を取得するBlackberryアプリを開発しています(ユーザーが設定した設定に応じて15,30、または60になる可能性があります)。ロケーションデータをWebサービスに送信します。
正常に実行され、約16-18時間の間しか正常にユーザーの場所が報告されないと、アプリはレポートを停止してユーザーインターフェイスが機能しなくなります。エラーを投げず、アプリが再起動されるまでユーザーの選択に反応しません。
アプリのクラッシュがかなり予測可能であることは奇妙です。たとえば、8時間または10時間後にクラッシュすることはありません。その16-18時間のウィンドウに常に表示されます。クラッシュはGPS/WebServiceレポート。
基本的には、GPS/WebServiceの観点から見れば、WebServiceに36時間(30時間ごとに18時間)レポートすることができるように見えます。
私は誰かのアイデアを誘発することを期待して、ここに少しコードを投稿します。
private void updateGPSLocation(){
gps_interval_timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
try{
getGPSLocation();
if(longitude != 0.0 && latitude != 0.0)
{
updateSubscriberLocation();
}
}catch(Exception ex){
}
}
}, 0, gps_interval);
}
そしてここでは、前のコードで参照getGPSLocation()呼び出しのためのコードです:
再びpublic void getGPSLocation(){
try{
//GPS thread
BlackBerryLocationProvider provider = (BlackBerryLocationProvider)LocationProvider.getInstance(new BlackBerryCriteria(GPSInfo.GPS_MODE_ASSIST));
//geolocation thread
BlackBerryLocationProvider provider1 = (BlackBerryLocationProvider)LocationProvider.getInstance(new BlackBerryCriteria(LocationInfo.GEOLOCATION_MODE_CELL));
if (provider != null){
provider.setLocationListener(new LocationListenerImpl(), _interval, 1, 1);
}
if(provider1 != null){
provider1.setLocationListener(new LocationListenerImpl(), _interval, 1, 1);
}
}
catch(Exception le){
}
}
、私は申し訳ありませんが、私は、これはオープンエンドの質問のようなものであることを知っています。 Blackberry GPSに関する既知の問題はありますか?私はタイマータスクを使ってインターバルベースのレポートをスケジューリングしているので、スケジュールされたタイマータスクをキューに入れるだけで、すべての使用可能なメモリを吸い上げることができますか? cancel()メソッドを使用してタイマータスクを明示的に破棄する必要はありますか?次のようなもの:
gps_interval_timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
try{
getGPSLocation();
if(longitude != 0.0 && latitude != 0.0)
{
updateSubscriberLocation();
}
}catch(Exception ex){
}
finally
{
this.cancel();
}
}
}, 0, gps_interval);
何か助けが大歓迎です。ありがとうございました! LocationListenerコード
private class LocationListenerImpl implements LocationListener {
public void locationUpdated(LocationProvider provider, Location location) {
if(location.isValid()) {
longitude = location.getQualifiedCoordinates().getLongitude();
latitude = location.getQualifiedCoordinates().getLatitude();
}
}
public void providerStateChanged(LocationProvider provider, int newState) {
}
}
getGPSLocation(に使用_interval変数で更新
)は-1に設定されています。
私はあなたがキャッチされているすべての可能な例外をログに記録するブラックベリーEventLoggerクラスを使用することによって開始しますあなたが私たちに示したコードで、Thread.activeCount()と組み合わせて、決して終了しないスレッドをあまりにも多く開始していないことを確認してください。解決できない例外がスローされた場合は、ここに報告してください。 – paulkayuk