首页 > 解决方案 > 即使在应用程序被销毁后如何运行工人管理器

问题描述

这是我到目前为止编写的代码,但是当活动被破坏时它不会运行。我想听听我的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();
    }
}

标签: androidfirebasefirebase-realtime-databaseandroid-workmanager

解决方案


WorkManager 不适用于必须在后台无限期保持活动状态的工作,因此它不适用于 Firebase 监听器之类的东西。你能做的最好的事情就是设置一个前台服务,但即使这样在某些情况下也会被杀死。

如果您有新数据要发送到您的客户端应用程序,您应该考虑使用 Firebase Cloud Messaging 发送数据,这将唤醒您的应用程序以传递消息。


推荐阅读