android - Phonegap 应用程序在收集位置时在后台死机

标签 android cordova geolocation background-process

我有一个内置于 PhoneGap 中的应用程序,它利用 navigator.geolocation 调用来跟踪移动设备的坐标。用户可以控制跟踪的开始和结束。该应用程序旨在在后台接收坐标更新。该应用程序针对 Android 和 iOS 设备发布。

Android 版本在后台时似乎很容易崩溃。在某些手机上它运行良好,但在很多手机上,该应用程序本应在后台收集坐标数据时就会死掉。我在下面发布了一个 LogCat 日志。似乎在 Activity 管理器在进程上调用“不再需要”之后不久,CCWalkerActivity 上发生了 WIN DEATH(两者都在下面以粗体显示)。但是,我无法确定为什么会发生这种情况以及为什么它发生得如此频繁。

这是 Phonegap 的问题吗?创建一个可以处理前台服务(使用 startForeground())的插件是否有益?

10-19 14:50:12.439 D/dalvikvm(  496): GC_CONCURRENT freed 1917K, 28% free 12417K/17031K, external 11622K/13670K, paused 12ms+10ms
10-19 14:50:13.040 D/CordovaLog( 6275): isGPSEnabled succeeded, accuracy: 12
10-19 14:50:13.040 D/CordovaLog( 6275): file:///android_asset/www/lib.js: Line 24 : isGPSEnabled succeeded, accuracy: 12
10-19 14:50:13.040 I/Web Console( 6275): isGPSEnabled succeeded, accuracy: 12 at file:///android_asset/www/lib.js:24
10-19 14:50:13.072 D/CordovaLog( 6275): collectLocationData success: 12
10-19 14:50:13.072 D/CordovaLog( 6275): file:///android_asset/www/lib.js: Line 24 : collectLocationData success: 12
10-19 14:50:13.072 I/Web Console( 6275): collectLocationData success: 12 at file:///android_asset/www/lib.js:24
10-19 14:50:14.072 D/WifiLocator(  976): Too many no-location APs. Will not compute a location nor go to the server. hasLocation=0 noLocation=0 cacheMiss=0
10-19 14:50:14.072 D/CellLocator(  976): Found cell location: Position [redacted]
10-19 14:50:14.072 D/androidNlpServiceThread(  976): reporting Location[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 msg id 12015
10-19 14:50:14.087 D/ClientReporter(  976): reported location
10-19 14:50:14.095 D/CordovaLog( 6275): collectLocationData success: 1123
10-19 14:50:14.095 D/CordovaLog( 6275): file:///android_asset/www/lib.js: Line 24 : collectLocationData success: 1123
10-19 14:50:14.095 I/Web Console( 6275): collectLocationData success: 1123 at file:///android_asset/www/lib.js:24
10-19 14:50:14.118 D/androidNlpServiceThread(  976): adding listener com.google.android.location.internal.client.NetworkLocationClient$1@40552710 with period 45
10-19 14:50:14.118 D/androidNetworkLocationListeners(  976): Still have listener com.google.android.location.internal.client.NetworkLocationClient$1@40552710
10-19 14:50:14.118 I/ActivityManager(  496): No longer want com.CCtracks.CCWalker (pid 6275): hidden #21
10-19 14:50:14.126 D/WifiLocator(  976): Too many no-location APs. Will not compute a location nor go to the server. hasLocation=0 noLocation=0 cacheMiss=0
10-19 14:50:14.126 D/CellLocator(  976): Found cell location: Position [redacted]
10-19 14:50:14.126 D/androidNlpServiceThread(  976): reporting Location[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): reported location
10-19 14:50:14.204 I/WindowManager(  496): WIN DEATH: Window{405a97d0 com.CCtracks.CCWalker/com.CCtracks.CCWalker.CCWalkerActivity paused=false}
10-19 14:50:14.228 D/androidNlpServiceThread(  976): adding listener com.google.android.location.internal.client.NetworkLocationClient$1@40552710 with period 86400
10-19 14:50:14.228 D/androidNetworkLocationListeners(  976): Still have listener com.google.android.location.internal.client.NetworkLocationClient$1@40552710
10-19 14:50:14.236 D/WifiLocator(  976): Too many no-location APs. Will not compute a location nor go to the server. hasLocation=0 noLocation=0 cacheMiss=0
10-19 14:50:14.236 D/CellLocator(  976): Found cell location: Position [redacted]
10-19 14:50:14.236 D/androidNlpServiceThread(  976): reporting Location[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): reported location
10-19 14:50:14.595 W/GpsLocationProvider(  496): Unneeded remove listener for uid 1000
10-19 14:50:14.595 D/libgps_GpsMgr(  496): schedGps() mode: 3, tbf: 0, accuracy: 0, perf: 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 not in session, sending fake END callback
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() set mode: 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 msg id 12015

最佳答案

如果您的应用进程在前台或前台服务中没有任何 Activity ,系统可以随时终止它以释放内存供其他应用使用。

因此,在您的情况下,当用户使用例如主页按钮离开您的应用程序时调用 Activity.onPause 后,您的应用程序进程可以随时终止。

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

关于android - Phonegap 应用程序在收集位置时在后台死机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12982079/

相关文章:

如果当天的闹钟时间已过,android会阻止立即触发闹钟服务

ios - 如何在 Phonegap ios 应用程序中嵌入 youtube 视频

cordova - 我可以在不离开 Capacitor 应用程序的情况下浏览网页吗?

javascript - 当前位置可拖动标记

java - 在另一个旁边画一个形状

Android native 代码 fork() 存在 IPC/Binder 问题

java - 如何为自定义 baseadapter 类中的项目设置自定义 ListView 字体

angularjs - 使用 Angular 的 Cordova APP 中 WWAHost 中未处理的异常

MySQL存储谷歌地图纬度/经度数据

algorithm - 确定一个点最接近的预定路线