周期性任务(观察线程)的最佳方法是什么?
What's the best method for periodic tasks (a watcher thread)?
我需要定期执行 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;
}
但也许有一些更好的工具可以做这样的事情。我试图搜索观察者,但找不到任何有用的东西。
你会如何实现这样的东西?
您可以使用 WorkManager or Alarm Manager for calling the api repeatedly. Check this 有关如何在 Android 中处理后台任务的文档。
我需要定期执行 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;
}
但也许有一些更好的工具可以做这样的事情。我试图搜索观察者,但找不到任何有用的东西。
你会如何实现这样的东西?
您可以使用 WorkManager or Alarm Manager for calling the api repeatedly. Check this 有关如何在 Android 中处理后台任务的文档。