1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/luckybilly-PreLoader

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README-zh-CN.md 8.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 05:10 1f69265

Предварительная загрузка: инструмент для оптимизации скорости запуска страниц

Последняя версия: Скачать

Звёзды GitHub Форки GitHub

Обновление журнала изменений см. в файле changelog.md.

Данные предварительно загружаются до открытия Activity, а затем отображаются после завершения инициализации пользовательского интерфейса (UI). Это значительно сокращает время запуска.

Предварительную загрузку можно запустить из любого места, создав идентификатор задачи. Затем можно отслеживать предварительную загрузку данных, используя этот идентификатор, после того как UI будет инициализирован.

  • Если предварительная загрузка не завершена при запуске отслеживания, то отслеживающий объект ожидает завершения загрузки перед выполнением своего обратного вызова.
  • Если задача предварительной загрузки завершена к моменту запуска отслеживания, отслеживающий объект сразу выполняет свой обратный вызов.

Оптимизация продолжается. Следите за проектом и ставьте звёзды!

Демо

Скачать демо

Типичные применения

  1. Загрузка данных адреса в Application.onCreate для последующего использования на страницах, где нужны эти данные.
  2. Предварительная загрузка основных данных приложения на стартовой странице, чтобы сократить время ожидания пользователя.
  3. Запуск предварительной загрузки до начала Activity, с отображением данных после завершения инициализации UI.
  4. Выполнение предварительной загрузки сложных страниц (с длительной инициализацией UI) до начала инициализации, с последующим отображением данных.
  5. Предварительная загрузка данных следующей страницы перед загрузкой дополнительных элементов в ListView или RecyclerView.

Функции

  • Поддержка различных операций, требующих времени, таких как сетевые данные, сетевые изображения, локальные изображения, запросы к базе данных и файловый ввод-вывод.
  • Возможность предварительной загрузки между Activity.
  • Поддержка обновления с помощью DataLoader, который повторно загружает данные и вызывает все DataListener после завершения.
  • Настройка собственного пула потоков.
  • Один DataLoader может иметь несколько DataListener.
  • Можно настроить несколько задач предварительной загрузки для одной Activity.
  • Добавление и удаление DataListener в любое время.

Изображение

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

  1. Добавьте зависимость в build.gradle:
dependencies {
    compile 'com.billy.android:pre-loader:x.x.x'
}
  1. Запустите задачу предварительной загрузки (например, перед запуском Activity):
int preLoaderId = PreLoader.preLoad(new Loader());
Intent intent = new Intent(this, PreLoadBeforeLaunchActivity.class);
intent.putExtra("preLoaderId", preLoaderId);
startActivity(intent);

// Пример задачи предварительной загрузки: имитация сетевого запроса для получения данных
class Loader implements DataLoader<String> {
    @Override
    public String loadData() {
        // Этот метод выполняется в пуле потоков, нет необходимости создавать новый поток для загрузки данных
        try {
            Thread.sleep(600);
        } catch (InterruptedException ignored) {
        }
        return "data from network server";
    }
}
  1. Начните отслеживать данные после инициализации UI в Activity (или Fragment):
PreLoader.listenData(preLoaderId, new Listener());

// После завершения загрузки данные будут обработаны методом DataListener.onDataArrived(...)
class Listener implements DataListener<String> {
    @Override
    public void onDataArrived(String data) {
        // Метод выполняется в основном потоке, не нужно использовать Handler для переключения потоков
        Toast.makeText(activity, data, Toast.LENGTH_SHORT).show();
    }
}
  1. Обновите данные, DataLoader повторно загрузит данные, и все методы DataListener будут вызваны после завершения:
PreLoader.refresh(preLoaderId);
  1. Уничтожьте задачу предварительной загрузки после использования (например, в onDestroy):
PreLoader.destroy(preLoaderId);
  1. Используйте GroupedDataLoader и GroupedDataListener для запуска нескольких задач предварительной загрузки (решение проблемы с управлением идентификаторами для нескольких задач на одной странице):
// Используйте GroupedDataLoader для запуска группы задач предварительной загрузки с общим идентификатором
int preLoaderId = PreLoader.preLoad(new Loader1(), new Loader2());
Intent intent = new Intent(this, PreLoadGroupBeforeLaunchActivity.class);
intent.putExtra("preLoaderId", preLoaderId);
startActivity(intent);

class Loader1 implements GroupedDataLoader<String> {
    @Override
    public String loadData() {
        TimeWatcher timeWatcher = TimeWatcher.obtainAndStart("GroupedDataLoader1 load data");
        try {
            Thread.sleep(600);
        } catch (InterruptedException ignored) {
        }
        return timeWatcher.stopAndPrint();
    }

    @Override
    public String keyInGroup() {
        return "loader1";
    }
}
class Loader2 implements GroupedDataLoader<String> {
    @Override
    public String loadData() {
        TimeWatcher timeWatcher = TimeWatcher.obtainAndStart("GroupedDataLoader2 load data");
        try {
            Thread.sleep(400);
        } catch (InterruptedException ignored) {
        }
        return timeWatcher.stopAndPrint();
    }

    @Override
    public String keyInGroup() {
        return "loader2";
    }
}

// Начните отслеживать данные в UI после инициализации с использованием GroupedDataListener
// GroupedDataListener и GroupedDataLoader связаны через ключ
// Можно отслеживать несколько данных одновременно
PreLoader.listenData(preLoaderId
        , new DataHolder1()
        , new DataHolder2()
);
// Или отслеживать по отдельности
PreLoader.listenData(preLoaderId, new

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/luckybilly-PreLoader.git
git@api.gitlife.ru:oschina-mirror/luckybilly-PreLoader.git
oschina-mirror
luckybilly-PreLoader
luckybilly-PreLoader
master