FirebaseJobDispatcher onStopJob 未触发
Posted
技术标签:
【中文标题】FirebaseJobDispatcher onStopJob 未触发【英文标题】:FirebaseJobDispatcher onStopJob not triggering 【发布时间】:2019-01-09 18:47:51 【问题描述】:当拨出电话或来电发生时,我正在开始工作
Bundle bundle = new Bundle();
bundle.putString("MobileNumber", number);
bundle.putString("CallStatus", "OUT");
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(ctx));
Job myJob = dispatcher.newJobBuilder()
.setService(FirebaseRecordingService.class) // the JobService that will be called
.setTag("my-unique-tag1") // uniquely identifies the job
.setExtras(bundle)
.build();
dispatcher.mustSchedule(myJob);
这次 onStartJob 执行了 现在我在通话结束后停止工作
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(ctx));
dispatcher.cancel("my-unique-tag1");
但这一次 onStopJob 没有执行。 谁能告诉我哪里做错了。
【问题讨论】:
您是否尝试过使用作业 ID 来启动和停止它? @quicklearner 我如何在 FirebaseJobDispatcher 中使用作业 ID???? 您是一次只启动一项服务还是另一种服务? @quicklearner 在传入和传出时间我只启动一项服务,但还有一些其他服务执行其他任务 请给我一点时间 【参考方案1】:试试这个解决方案来解决你的问题
当您开始作业时,只需使用此方法检查FirebaseRecordingService.Class
服务类是否正在运行
private boolean isMyServiceRunning(Class<?> serviceClass)
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE))
if (serviceClass.getName().equals(service.service.getClassName()))
return true;
return false;
你的代码看起来像这样
if (isMyServiceRunning(context_here))
System.out.println("service already started stopping now");
stopService(new Intent(context_here, FirebaseRecordingService.class));
Bundle bundle = new Bundle();
bundle.putString("MobileNumber", number);
bundle.putString("CallStatus", "OUT");
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(ctx));
Job myJob = dispatcher.newJobBuilder()
.setService(FirebaseRecordingService.class) // the JobService that will be called
.setTag("my-unique-tag1") // uniquely identifies the job
.setExtras(bundle)
.build();
dispatcher.mustSchedule(myJob);
然后到何时执行工作以停止作为firebase作业的服务
这样做
if (isMyServiceRunning(context_here))
System.out.println("service already started stopping now");
stopService(new Intent(context_here,FirebaseRecordingService.class));
不要这样称呼
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(ctx));
它将创建 FirebaseJobDispatcher 类的另一个对象使用 用于启动作业服务的声明对象
dispatcher.cancel("my-unique-tag1");
或者,如果一次只运行一项服务,您可以调用
dispatcher.cancelAll();
【讨论】:
我怎样才能获得以前的 firebasejobdispatcher 对象,因为如果应用程序被杀死,它将为空。我应该使用 dispatcher.cancel() 来停止服务还是 stopService()? 对于这种情况你应该停止而不是调用 dispatcher.cancel() ,最好停止服务而不是取消调度程序 我尝试使用 stopService() 来停止,但它不起作用。即使在 stopService() 方法之后,isMyServiceRunning(context_here) 方法也总是返回 true 你能在 FirebaseRecordingService.class 发布这个课程吗? 我在这里创建了一个新问题***.com/questions/51780753/…你能评论一下吗?以上是关于FirebaseJobDispatcher onStopJob 未触发的主要内容,如果未能解决你的问题,请参考以下文章
从 FirebaseJobDispatcher 迁移到 AndroidX Workmanager 时:如何在 startWork 中返回 ListenableFuture? [复制]
为啥 Firebase JobDispatcher 运行 JobService 2 次?
Firebase Jobdispatcher - 现在开始并重复