Android-сервис разрушается в режиме ожидания - PullRequest
0 голосов
/ 09 сентября 2018

Ниже мой андроид, который запускается при нажатии кнопки активности. Но я вижу, что когда деятельность прекращается, служба уничтожается. Я хочу, чтобы служба работала постоянно, даже если приложение закрыто / убито / очищено.

public class ScreenService extends Service{

    private BroadcastReceiver sReceiver;

    public IBinder onBind(Intent arg){
        Log.d(Constant.APP_TAG,"onBind service method called");
        return null;
    }

    public int onStartCommand(Intent intent,int flag, int startIs){
        Log.d(Constant.APP_TAG,"onStartCommand service method called");
        return START_STICKY;
    }

    public void onDestroy(){
        Log.d(Constant.APP_TAG,"onDestroy service method called");
    }
}

Он запускается из действия с использованием следующего кода:

Intent intent = new Intent(MainActivity.this, ScreenService.class);
MainActivity.this.getApplicationContext().startService(intent);

Если я нажму на Очистить все в Android, я вижу, что вызывается метод ondestroy. Как сохранить работоспособность службы или, по крайней мере, обеспечить ее перезапуск

1 Ответ

0 голосов
/ 10 сентября 2018

Вам нужно сделать его приоритетным сервисом.

Чтобы запустить его, используйте

ContextCompat.startForegroundService(this, new Intent(this, ScreenService.class));

В вашем методе onCreate() в вашей Службе вам нужно будет сообщитьслужба запускается на переднем плане:

@Override
public int onCreate() {
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        manager.createNotificationChannel(new NotificationChannel("some_id", "My Notification Channel"), Notification.IMPORTANCE_LOW);
    }

    NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "some_id")
            .setContentTitle("My Notification")
            .setSmallIcon(R.mipmap.ic_launcher);
    startForeground(100, builder.build());
}

А в onDestroy() звоните

stopForeground(true);
...