我有一个内置在PhoneGap中的应用,可以使用navigator.geolocation
次来跟踪移动设备的坐标。用户可以控制开始跟踪以及结束跟踪。该应用程序的构建是为了在后台接收坐标更新。该应用程序适用于Android和iOS设备。
Android版本似乎在后台崩溃时容易崩溃。在一些手机上它确实没问题,但是在很多手机上,应用程序只会在它应该在后台收集坐标数据时死掉。我在下面发布了一个LogCat日志。在CCWalkerActivity
经理调用“不再需要”之后不久Activity
就会出现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
答案 0 :(得分:2)
如果您的应用程序进程在前台或前台服务中没有任何活动,系统可以随时将其杀死以释放其他应用程序的内存。
因此,在您的情况下,当用户使用例如主页按钮离开您的应用程序时调用了Activity.onPause后,您的应用程序进程可以随时终止。
http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle
答案 1 :(得分:1)
您需要制作一些排序服务,以便即使您的应用未运行它也会继续运行。 (如果你的应用程序不在前台并且系统需要内存,你的应用程序可以随时被杀死。)
为此,您需要编写本机代码(适用于Android应用程序的Java)。查看官方文档,了解如何编写服务或更好的手机插件插件。