【问题标题】:Phonegap app dies in background while collecting locationPhonegap 应用程序在收集位置时在后台死机
【发布时间】:2012-10-10 12:43:31
【问题描述】:

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

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

这是 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 msg 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):添加监听器 com.google.android.location.internal.client.NetworkLocationClient$1@40552710,周期为 45 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: Window{405a97d0 com.CCtracks.CCWalker/com.CCtracks.CCWalker.CCWalkerActivity paused=false} 10-19 14:50:14.228 D/androidNlpServiceThread(976):添加侦听器 com.google.android.location.internal.client.NetworkLocationClient$1@40552710,期间为 86400 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:空 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 msg id 12015

【问题讨论】:

    标签: android cordova geolocation background-process


    【解决方案1】:

    您需要创建某种排序服务,以便即使您的应用未运行,它也能继续运行。 (如果您的应用不在前台且系统需要内存,则可以随时终止您的应用)。

    为此,您需要编写本机代码(Android 应用程序的 Java)。查看官方文档,了解如何编写服务或更好的 phonegap 插件。

    【讨论】:

      【解决方案2】:

      如果您的应用进程在前台或前台服务中没有任何活动,则系统可以随时将其终止,以便为其他应用释放内存。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-10
        • 1970-01-01
        • 2015-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-08
        相关资源
        最近更新 更多