Служба останавливается, когда приложение находится в фоновом режиме && экран заблокирован - PullRequest
0 голосов
/ 31 октября 2018

Внутри службы Foreground Я кодирую носитель с помощью FFMPEG . Записывая прогресс кодирования, я заметил, что процесс приостанавливается (на некоторых устройствах)

пока device connected to adb over wifi(NOT USB) && screen is locked.

Я пытался:

    try {
        final PowerManager mgr = (PowerManager) getSystemService(Context.POWER_SERVICE);
        if (mgr != null) {
            wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TAG:WakeLock");
            if (!wakeLock.isHeld()) {
                wakeLock.acquire();
                Log.i("AppController","Engaging WakeLock");
            }else{
                Log.i("AppController","WakeLock was already engaged");

            }

        }
    } catch (Exception ignored) {
    }

Пробовал AlarmManager внутри Application класс || My service класс.

Я пытался commonsguy / cwac-wakeful .

Пробовал ignore battery optimization

Тем не менее процессор переходит в спящий режим через одну минуту.

Услуги

public class CompressionService extends Service {

private Messenger _activityMessenger;

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    _activityMessenger = intent.getParcelableExtra(MESSENGER_INTENT_KEY);
    return START_STICKY;
}

@Override
public IBinder onBind(Intent intent) {
    return mBinder;
}

private final IFFmpegProcessService.Stub mBinder = new IFFmpegProcessService.Stub() {
    @Override
    public void startEncode(final List<String> ffmpegArgs, final String outputFile)  {
        ExecuteBinaryResponseHandler handler = new ExecuteBinaryResponseHandler() {
            @Override
            public void onProgress(String s) {
                long progress = FFmpegUtil.getProgres(s);
                Log.d("JOB_PROGRESS: " + progress);
                sendMessage(progress);

            }
        };
        FFmpegUtil.call(handler);
    }
    @Override public void cancel() throws RemoteException { }
    @Override public boolean isEncoding() throws RemoteException {return false; }
};



private void sendMessage(@Nullable Object params) {
    Message m = Message.obtain();
    m.what = MessageId.JOB_PROGRESS.ordinal();
    m.obj = params;
    try {
        _activityMessenger.send(m);
    } catch (RemoteException e) { e.printStackTrace();}
}


}

Работает на API 24 || API 26 Honor 8 Lite

1 Ответ

0 голосов
/ 31 октября 2018

Вам нужно реализовать это как ForegroundService. Необходимо избегать приостановки как минимум с API уровня 26.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...