android - 即使在应用程序被销毁后如何运行工人管理器
问题描述
这是我到目前为止编写的代码,但是当活动被破坏时它不会运行。我想听听我的firebase中的任何更改并将其保存在一个数组中,它在活动为onPause或onStop时工作,当它被销毁时它确实在日志中显示任何更新
public class FirebaseSectionWorker extends Worker {
final String TAG = "FirebaseBackground";
private DatabaseReference mDatabase;
public FirebaseSectionWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@Override
public void onStopped() {
super.onStopped();
Log.d(TAG, "onStopped: Firebase listener stopped");
}
@NonNull
@Override
public Result doWork() {
Log.d(TAG, "doWork(): Has started to run in the background");
//Database reference
mDatabase = FirebaseDatabase.getInstance().getReference().child("users");
mDatabase.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Log.d(TAG, "onChildChanged(): A child has been changed: " + dataSnapshot);
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
return Result.success();
}
}
解决方案
WorkManager 不适用于必须在后台无限期保持活动状态的工作,因此它不适用于 Firebase 监听器之类的东西。你能做的最好的事情就是设置一个前台服务,但即使这样在某些情况下也会被杀死。
如果您有新数据要发送到您的客户端应用程序,您应该考虑使用 Firebase Cloud Messaging 发送数据,这将唤醒您的应用程序以传递消息。
推荐阅读
- here-api - 可以在此处的地图中设置位置精度指示器吗?
- c# - 正则表达式允许数字、破折号、逗号
- python-3.x - 如何通过对 36x60 大小的数据进行训练的神经网络预测不同的数据?
- php - 如何取消设置 Laravel 块中的引用变量传递?
- vb.net - 代理授权标头在 HttpWebRequest 中不起作用,以防对 URL 的 Rest 请求
- oracle - 对任何子表行的更新将整个父表锁定在 oracle
- laravel - Moodle 自动登录插件 - 如何将用户引导至特定课程?
- android - RecycleView Kotlin 与 ArrayList 总是大小 = 0
- jestjs - jest@23.1.0 collectCoverageFrom 不选择根目录外的文件
- javascript - 为什么 2 位数字不适用于 Date.toLocaleTimeString?