Loader и LoaderManager – как определить, активен ли текущий загрузчик и работает ли он?

Как вы можете запросить LoaderManager, чтобы увидеть, запущен ли загрузчик?

Вызовите getLoaderManager() для своей ( Fragment ) Activity , найдите свой Loader и вызовите isStarted() , считая, что это означает «запуск».

Это можно сделать двумя способами:

1-й случай

Если вы используете только Loader или у вас есть несколько, но вам все равно, какой из них работает:

 getSupportLoaderManager().hasRunningLoaders() 

Второй случай

Вы хотите знать, работает ли какой-то определенный Loader . Кажется, SDK не поддерживается, но вы можете легко реализовать его самостоятельно.

A) Просто добавьте флаг

 public class SomeLoader extends AsyncTaskLoader<String[]> { public boolean isRunning; @Override protected void onStartLoading() { isRunning = true; super.onStartLoading(); //... forceLoad(); } @Override public void deliverResult(String[] data) { super.deliverResult(data); isRunning = false; } //... } 

Б) и использовать его (немного сложнее) 🙂

 SomeLoader loader = (SomeLoader) manager.<String[]>getLoader(ID); Log.d(TAG, "isRunning: " + loader.isRunning); 

Основная причина, по которой я разместил ее здесь, – это достаточно сложный вызов общего метода, прежде чем бросать Loader на ваш SomeLoader .

напоминание

Что бы вы ни делали, если вы вызываете getSupportLoaderManager.restartLoader ваша текущая задача (если она запущена) не будет убита. Таким образом, следующим шагом будет вызов onCreateLoader который создаст новый Loader . Таким образом, это означает, что у вас может быть 2,3,4,5 и более одинаковые задачи параллельных задач вместе (если вы этого не мешаете), которые могут привести к разрядке батареи и превышению загрузки ЦП / сети.

Использование:

 getLoaderManager().getLoader(id) 

Если есть, верните загрузчик, затем вызовите isStarted() чтобы проверить, что он запущен.