0

我需要执行定期的 http 请求。我对请求使用 volley,但我不想溢出队列。

现在我有一个线程将请求排入队列并等待 3 秒。

AtomicBoolean quitUsersWatcher = new AtomicBoolean(false);

class UsersWatcher extends Thread {
    final Context context;
    ActiveUsersWatcher(Context c) {
        context = c;
    }
    public void run() {
        while (!quitUsersWatcher.get()) {
            JsonArrayRequest usersRequest = new JsonArrayRequest(Request.Method.GET, Config.ALL_USERS_URL, null,
                    this::getUsers,
                    Throwable::printStackTrace
            );

            try {
                RequestQueue queue = MySingleton.getInstance(context).getRequestQueue();
                queue.add(usersRequest);
                sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    private void getUsers(JSONArray jsonResult) {
        //some logic
    }
}

但我不认为这sleep是最好的主意。我想到了一个增加 1 到 64 或 128 的变量,然后将请求排入队列。像这样:

int counter = 0;
while (!quitUsersWatcher.get()) {
    if(counter >= 128) {
        JsonArrayRequest usersRequest = new JsonArrayRequest(Request.Method.GET, 
        Config.ALL_USERS_URL, null, 
        this::getUsers, 
        Throwable::printStackTrace);

        RequestQueue queue = MySingleton.getInstance(context).getRequestQueue();
        queue.add(usersRequest);
        counter = 0;
    }

    ++counter;        
}

但也许有一些更好的工具来做这样的事情。我试图寻找一个观察者,但我找不到任何有用的东西。

你将如何实现这样的事情?

4

1 回答 1

1

您可以使用WorkManagerAlarm Manager重复调用 api。查看文档以了解如何在 Android 中处理后台任务。

于 2022-01-31T11:14:16.120 回答