9

navigator.geolocationモバイルデバイスの座標を追跡するために呼び出しを利用するPhoneGapに組み込まれたアプリがあります。ユーザーは追跡の開始と終了を制御できます。このアプリは、バックグラウンドで座標の更新を受信するように構築されています。このアプリは、Android デバイスと iOS デバイスの両方でリリースされています。

Android版はバックグラウンドでクラッシュしやすいようです。一部の携帯電話では問題なく動作しますが、多くの携帯電話では、アプリがバックグラウンドで座標データを収集している間に、単に停止します。以下に LogCat ログを投稿しました。Manager がプロセスで「もう必要ありません」と呼び出したCCWalkerActivity直後にWIN DEATH が発生したようです (両方とも以下に太字で示されています)。Activityしかし、なぜこれが起こっているのか、なぜ頻繁に起こっているのかを判断することはできません.

これは Phonegap の問題ですか? (を使用して) フォアグラウンド サービスを処理できるプラグインを作成することはstartForeground()有益でしょうか?

10-19 14:50:12.439 D/dalvikvm( 496): GC_CONCURRENT 解放 1917K、28% 解放 12417K/17031K、外部 11622K/13670K、一時停止 12ms+10ms
10-19 14:50:13.040 D/CordovaLog(6275): isGPSEnabled 成功、精度: 12
10-19 14:50:13.040 D/CordovaLog(6275): file:///android_asset/www/lib.js: 24 行目: isGPSEnabled 成功、精度: 12
10-19 14:50:13.040 I/Web コンソール( 6275): isGPSEnabled 成功、精度: 12 at file:///android_asset/www/lib.js:24
10-19 14:50:13.072 D/CordovaLog (6275): collectLocationData 成功: 12
10-19 14:50:13.072 D/CordovaLog(6275): file:///android_asset/www/lib.js: 24 行目: collectLocationData 成功: 12
10-19 14:50:13.072 I/Web コンソール (6275): collectLocationData 成功: 12 at file:///android_asset/www/lib.js:24
10-19 14:50:14.072 D/WifiLocator (976): 場所のない AP が多すぎます。場所を計算したり、サーバーに移動したりしません。hasLocation=0 noLocation=0 cacheMiss=0
10-19 14:50:14.072 D/CellLocator( 976): 見つかったセルの場所: 位置 [編集済み]
10-19 14:50:14.072 D/androidNlpServiceThread( 976): 場所の報告 [mProvider=network,mTime=1350672614078,mLatitude=40.8390777,mLongitude=-73.6949326,mHasAltitude=false,mAltitude=0.0,mHasSpeed=false,mSpeed=0.0 ,mHasBearing=false,mBearing=0.0,mHasAccuracy=true,mAccuracy=1123.0,mExtras=Bundle[{networkLocationSource=cached, networkLocationType=cell}]]
10-19 14:50:14.087 D/libgps (496): GpsInterface_inject_location (40.839078、-73.694933、1123.000)
10-19 14:50:14.087 D/libgps (496): MPDINJPOS_REQ メッセージ ID 12015
10-19 14:50:14.087 D/ClientReporter(976): 報告された場所
10-19 14:50:14.095 D/CordovaLog (6275): collectLocationData の成功: 1123
10-19 14:50:14.095 D/CordovaLog(6275): file:///android_asset/www/lib.js: 24 行目: collectLocationData 成功: 1123
10-19 14:50:14.095 I/Web コンソール (6275): collectLocationData 成功: 1123 at file:///android_asset/www/lib.js:24
10-19 14:50:14.118 D/androidNlpServiceThread( 976): 期間 45 でリスナー com.google.android.location.internal.client.NetworkLocationClient$1@40552710 を追加
10-19 14:50:14.118 D/androidNetworkLocationListeners(976): まだリスナー com.google.android.location.internal.client.NetworkLocationClient$1@40552710 があります
10-19 14:50:14.118 I/ActivityManager( 496): もう com.CCtracks.CCWalker は必要ありません (pid 6275): 非表示 #21
10-19 14:50:14.126 D/WifiLocator (976): 場所のない AP が多すぎます。場所を計算したり、サーバーに移動したりしません。hasLocation=0 noLocation=0 cacheMiss=0
10-19 14:50:14.126 D/CellLocator( 976): 見つかったセルの場所: 位置 [編集済み]
10-19 14:50:14.126 D/androidNlpServiceThread( 976): 場所の報告 [mProvider=network,mTime=1350672614137,mLatitude=40.8390777,mLongitude=-73.6949326,mHasAltitude=false,mAltitude=0.0,mHasSpeed=false,mSpeed=0.0 ,mHasBearing=false,mBearing=0.0,mHasAccuracy=true,mAccuracy=1123.0,mExtras=Bundle[{networkLocationSource=cached, networkLocationType=cell}]]
10-19 14:50:14.134 D/ClientReporter(976): 報告された場所
10-19 14:50:14.204 I/WindowManager(496): WIN DEATH: ウィンドウ {405a97d0 com.CCtracks.CCWalker/com.CCtracks.CCWalker.CCWalkerActivity 一時停止 = false}
10-19 14:50:14.228 D/androidNlpServiceThread( 976): 期間 86400 でリスナー com.google.android.location.internal.client.NetworkLocationClient$1@40552710 を追加
10-19 14:50:14.228 D/androidNetworkLocationListeners( 976): まだリスナー com.google.android.location.internal.client.NetworkLocationClient$1@40552710 があります
10-19 14:50:14.236 D/WifiLocator (976): 場所のない AP が多すぎます。場所を計算したり、サーバーに移動したりしません。hasLocation=0 noLocation=0 cacheMiss=0
10-19 14:50:14.236 D/CellLocator( 976): 見つかったセルの場所: 位置 [編集済み]
10-19 14:50:14.236 D/androidNlpServiceThread( 976): 場所の報告[mProvider=network,mTime=1350672614246,mLatitude=40.8390777,mLongitude=-73.6949326,mHasAltitude=false,mAltitude=0.0,mHasSpeed=false,mSpeed=0.0 ,mHasBearing=false,mBearing=0.0,mHasAccuracy=true,mAccuracy=1123.0,mExtras=Bundle[{networkLocationSource=cached, networkLocationType=cell}]]
10-19 14:50:14.243 D/ClientReporter(976): 報告された場所
10-19 14:50:14.595 W/GpsLocationProvider(496): uid 1000 の不要な削除リスナー
10-19 14:50:14.595 D/libgps_GpsMgr (496): schedGps() モード: 3、tbf: 0、精度: 0、パフォーマンス: 0、pAgps: null
10-19 14:50:14.595 D/libgps (496): GpsInterface_stop()
10-19 14:50:14.603 D/libgps (496): action_thread_main(): BP がセッションにないため、偽の END コールバックを送信します
10-19 14:50:14.603 D/libgps (496): status_cb: GPS_STATUS_SESSION_END (2)
10-19 14:50:14.603 D/libgps_GpsMgr (496): sched() セット モード: 3、tbf: 0
10-19 14:50:14.634 D/libgps (496): GpsInterface_inject_location (40.839078、-73.694933、1123.000)
10-19 14:50:14.634 D/libgps (496): MPDINJPOS_REQ メッセージ ID 12015
4

2 に答える 2

2

アプリプロセスにフォアグラウンドまたはフォアグラウンドサービスでアクティビティがない場合、システムによっていつでも強制終了され、他のアプリのメモリを解放できます。

したがって、あなたの場合、ユーザーがたとえばホームボタンを使用してアプリを離れたときにActivity.onPauseが呼び出された後、アプリプロセスはいつでも強制終了できます。

http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle

于 2012-10-24T09:33:58.450 に答える
1

アプリが実行されていなくても実行し続けるように、何らかの並べ替えサービスを作成する必要があります。(フォアグラウンドになく、システムがメモリを必要とする場合、アプリはいつでも強制終了できます)。

これを行うには、ネイティブ コード (Java for Android アプリ) を記述する必要があります。サービスの書き方や phonegap プラグインの書き方については、公式ドキュメントを参照してください。

于 2013-03-28T21:16:33.380 に答える