Служба перестанет работать, когда мы очистим приложение из последних приложений?

это общественный класс GPSTracker расширяет Сервис реализует ConnectionCallbacks , OnConnectionFailedListener , LocationListener , GooglePlayServicesClient . ConnectionCallbacks { public static final long UPDATE_INTERVAL = 5000 ; public static final long FASTEST_INTERVAL = 1000 ; private LocationClient mLocationClient ; private LocationRequest mLocationRequest ; private boolean mInProgress ; private boolean servicesAvailable = false ; DatabaseHandler db ; @Override public void onCreate () { супер . onCreate (); mInProgress = false ; mLocationRequest = LocationRequest . create () . setPriority ( LocationRequest . PRIORITY_BALANCED_POWER_ACCURACY ) . setInterval ( UPDATE_INTERVAL ) // Установите интервал обновления на 5 секунд . setFastestInterval ( FASTEST_INTERVAL ); // Устанавливаем самый быстрый интервал обновления в 1 секунду servicesAvailable = servicesConnected (); setUpLocationClientIfNeeded (); db = new DatabaseHandler ( this ); } private boolean servicesConnected () { int resultCode = GooglePlayServicesUtil . isGooglePlayServicesAvailable ( это ); return ConnectionResult . УСПЕХ == resultCode ; } @Override public int onStartCommand ( Intent intent , int flags , int startId ) { супер . onStartCommand ( намерение , флаги , startId ); Журнал . d ( «TAG» , «onLocationChanged onStart Command» ); if (! servicesAvailable || mLocationClient . isConnected () || mInProgress ) return START_STICKY ; setUpLocationClientIfNeeded (); if (! mlocationClient . isConnected () || ! mLocationClient . isConnecting () && ! mInProgress ) { mInProgress = true ; mlocationClient . connect (); } return START_STICKY ; } @Override public IBinder onBind ( намерение намерения ) { return null ; } @Override public void onDestroy () { / * mInProgress = false; if (servicesAvailable && mLocationClient! = null) {mLocationClient.removeLocationUpdates (this); mLocationClient = null; } * / супер . onDestroy (); } private void setUpLocationClientIfNeeded () { if ( mLocationClient == null ) mLocationClient = new LocationClient ( это , это , это ); } / * * Обратные вызовы LocationListener * / @Override public void onLocationChanged ( Местоположение местоположения ) { //Carnival.updateLocation(location); Журнал . d ( «TAG» , «onLocationChanged» + местоположение . getLongitude ()); Журнал . d ( «Вставить:» , «Вставка ..» ); дБ . addContact ( новый контакт ( "" + местоположение , getTime (), «Локатор» + местоположение . getLatitude () + "Долгота" + местоположение . getLongitude ())); } / * * GooglePlayServicesClient Callbacks * / @Override общественного аннулируются onConnected ( Bundle пучок ) { если ( mLocationClient ! = NULL ) { mLocationClient . requestLocationUpdates ( mLocationRequest , this ); } } @Override public void onDisconnected () { } @Override public void onConnectionSuspended ( int i ) { } @Override public void onConnectionFailed ( ConnectionResult connectionResult ) { mInProgress = false ; / * * Службы Google Play могут разрешить некоторые обнаруженные ошибки. * Если ошибка имеет разрешение, попробуйте отправить Intent для * запуска активности служб Google Play, которая может разрешить * ошибку. * / if (! connectionResult . hasResolution ()) { // Если разрешения нет, отобразите диалоговое окно с ошибкой } } }, потому что когда iam работает под кодом. Чтобы обновить lat, lng, когда изменилось местоположение. Когда я очищаю приложение от последних приложений, обновление местоположения становится остановленным. Когда я вижу, что мои текущие приложения видят, что Служба находилась в запущенном состоянии. Очистите сомнение в том, что Служба будет работать точно. Advance.

Service

android,service,android-intentservice,

0

Ответов: 3


1

A regular Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text), System.currentTimeMillis()); Intent notificationIntent = new Intent(this, ExampleActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); notification.setLatestEventInfo(this, getText(R.string.notification_title), getText(R.string.notification_message), pendingIntent); startForeground(ONGOING_NOTIFICATION_ID, notification); won't be enough to ensure that the system isn't going to kill it while he/she clears our app from the Recent list.

For that particular purpose, tell the system that you want the startForeground() to be run as a foreground:

A foreground Service is a service that's considered to be something the user is actively aware of and thus not a candidate for the system to killa€¦

You do that by calling this from within a Service:

Service

As you can see, @Override public void onTaskRemoved(Intent rootIntent){ Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass()); PendingIntent restartServicePendingIntent = PendingIntent.getService( getApplicationContext(), 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT); AlarmManager alarmService = (AlarmManager) getSystemService(Context.ALARM_SERVICE); alarmService.set(ELAPSED_REALTIME, elapsedRealtime() + 1000, restartServicePendingIntent); super.onTaskRemoved(rootIntent); } takes in a Service as one of its parameters. For eventually it will put a persistent notification to inform the users that your Service is currently running in the background.


After doing a couple more research on this, it seems like making a Service foreground isn't quite enough to ensure its persistence on conditions like this.

One workaround is then to listen when our app is being swiped away from Recents list and explicitly restart our Service from there by doing so:

stopWithTask=false

Of course, you have to add the appropriate flag on the Service's declaration on the Manifest (see Max Rockwood's answer).


0

you need to set <service android:enabled="true" android:name=".MyService" android:stopWithTask="false" /> in manifest for service.

Something like this:

onTaskRemoved()

It prevents the service from stopping and there is method which gets called if we clear the app from recents if you want to perform any action you can ovorride it.it.


0

there is an event named OnStartCommand() override it and call the activity again in that function

android,service,android-intentservice,
Похожие вопросы