android - 在 onStartJob 中注册后广播接收器不起作用
问题描述
我使用FirebaseJobDispatcher
andJobService
在后台做一些工作。主要是我想注册到屏幕开/关接收器。当作业第一次被调用时,接收者按预期注册。但是,在调用 , 之后onStartJob()
,onDestroy()
根据日志,接收者为空。如果我尝试触发屏幕打开/关闭,我看不到来自接收器的任何日志。我在这里做错了什么?
在onStratJob()
我有以下代码:
public boolean onStartJob(@NonNull JobParameters job) {
Log.i(JobFormActivity.TAG, "onStartJob() called");
if (screenBroadcast == null){
Log.e(JobFormActivity.TAG, "onStartJob() --> receiver is null, registering receiver");
IntentFilter screenStateFilter = new IntentFilter();
screenStateFilter.addAction(Intent.ACTION_SCREEN_ON);
screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(screenBroadcast, screenStateFilter);
}
return false;
}
在onStopJob()
我有以下代码:
@Override
public boolean onStopJob(@NonNull JobParameters job) {
Log.e(JobFormActivity.TAG, "onStopJob() called");
if(screenBroadcast != null) {
Log.e(JobFormActivity.TAG, "onStopJob() --> receiver is not null, unregistering receiver");
unregisterReceiver(screenBroadcast);
}
return false;
}
在onDestroy()
我有以下代码:
public void onDestroy() {
super.onDestroy();
Log.e(JobFormActivity.TAG, "onDestory()");
if(screenBroadcast != null)
Log.e(JobFormActivity.TAG, "onDestroy() --> receiver is not null");
else
Log.e(JobFormActivity.TAG, "onDestory() --> receiver is null");
}
解决方案
我的问题是我screenBroadcast
在onStartJob()
检查它是否为null
. 我也回来false
了,onStartJob()
而不是true
。
从文档:
从此方法返回 false 意味着您的工作已经完成。系统对作业的唤醒锁将被释放,并且不会调用 onStopJob(android.app.job.JobParameters)。
和:
如果您的作业需要继续运行,则从此方法返回 true。如果您这样做,作业将保持活动状态,直到您调用 jobFinished(android.app.job.JobParameters, boolean) 来告诉系统它已完成其工作,或者直到作业的所需约束不再满足。
就我而言,由于我需要广播接收器处于活动状态,因此我需要返回 true 以便不会调用 onDestroy 并且接收器不会取消注册。
推荐阅读
- python - 在 Python 中将平均值、中值和标准差值添加为新的数组列
- c - 带 strtok 的多维数组
- python - 使用带有半结构化数据的 Python,如何根据前一行中遇到的文本添加列值
- objective-c - 使用 KeyChainItemWrapper 添加钥匙串项时使用的正确标识符是什么?
- sql-server - 在 postgresSQL 中使用 sql 查询(如 CROSSTAB)创建数据透视表
- pg-promise - pg-promise 会丢弃吗?
- html - 视频周围的 iFrame - 视频嵌入错误(自己的托管)
- arduino - 字符串末尾的额外“null”
- java - 使用 PDFBOX 拆分 pdf 文件会创建大尺寸文件
- postgresql - 有没有办法在 psql 或命令行中检查已经预加载的库?