在前景服务中,我使用 FFMPEG 对媒体进行编码.通过记录编码进度,我注意到该过程已暂停(在某些设备中)
Inside a Foreground Service I encode media with FFMPEG. By logging the encode progress I noticed the process gets paused(in some devices)
而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) { }在Application类中尝试了AlarmManager || My service类.
Tried AlarmManager inside Application class || My service class.
我尝试了 commonsguy/cwac-wakeful .
尝试了ignore battery optimization
经过一分钟的处理后,仍然CPU进入睡眠状态.
Still CPU goes to sleep after one minute process.
服务
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
推荐答案您需要将其实现为ForegroundService.必须至少从API级别26避免暂停.
You need to implement it as ForegroundService. It is required to avoid the pausing at least from API Level 26.
更多推荐
当应用程序处于后台&&中时,服务会暂停屏幕被锁定
发布评论