2012-10-19 13 views
9

Mam aplikację wbudowaną w PhoneGap, która korzysta z połączeń navigator.geolocation do śledzenia współrzędnych urządzenia mobilnego. Użytkownik ma kontrolę nad rozpoczęciem śledzenia i jego zakończeniem. Aplikacja została zbudowana, aby otrzymywać aktualizacje współrzędnych w tle. Ta aplikacja jest dostępna na urządzenia z Androidem i iOS.Aplikacja Phonegap umiera w tle podczas zbierania lokalizacji

Wersja Androida wydaje się być podatna na awarię, gdy znajduje się w tle. Na niektórych telefonach działa dobrze, ale na wielu z nich aplikacja po prostu zginie, podczas gdy powinna zbierać dane współrzędnych w tle. Poniżej zamieściłem dziennik LogCat. Wygląda na to, że WIN ŚMIERĆ pojawia się na CCWalkerActivity krótko po Activity Menedżer nazywa "Nie chcę już" w procesie (oba są pogrubione poniżej). Nie potrafię jednak określić, dlaczego tak się dzieje i dlaczego tak często się dzieje.

Czy to jest problem z Phonegap? Czy stworzenie wtyczki, która mogłaby usprawnić proces usługi pierwszoplanowej (przy użyciu startForeground()) byłoby korzystne?

 
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.[email protected]40552710 with period 45 
10-19 14:50:14.118 D/androidNetworkLocationListeners( 976): Still have listener com.[email protected]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.[email protected]40552710 with period 86400 
10-19 14:50:14.228 D/androidNetworkLocationListeners( 976): Still have listener com.[email protected]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 

Odpowiedz

2

Jeśli proces aplikacja nie ma żadnych działań w planie lub pierwszy plan usługi mogą być zabite w dowolnym czasie przez system, aby zwolnić pamięć dla innych aplikacji.

W Twoim przypadku, po tym jak Activity.onPause został wywołany, gdy użytkownicy opuszczają twoją aplikację za pomocą np. Przycisku strony głównej, twój proces aplikacji może zostać w dowolnym momencie zabity.

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

1

Musisz zrobić jakąś służbę sortowania tak, że będzie nadal działać, nawet jeśli aplikacja nie działa. (Twoja aplikacja może zostać zabita w dowolnym momencie, jeśli nie jest na pierwszym planie, a system wymaga pamięci).

Aby to zrobić, musisz napisać kod natywny (aplikacja Java dla systemu Android). Sprawdź w oficjalnym dokumencie, jak napisać usługę lub lepiej wtyczkę do gry w telefon.

Powiązane problemy