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

OSCHINA-MIRROR/luckybilly-PreLoader

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

PreLoader: Сделайте запуск активности быстрее

Скачать

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

Предварительно загружайте данные перед открытием Activity и отображайте их в пользовательском интерфейсе после инициализации UI. Ускорьте запуск Activity.

Вы можете запустить PreLoader где угодно и начать прослушивать данные, загруженные PreLoader с помощью preLoaderId.

  • Если DataLoader.loadData() не завершён, то DataListener.onDataArrived() будет вызван после завершения загрузки данных.
  • Если DataLoader.loadData() завершён, то DataListener.onDataArrived() вызывается немедленно.

Непрерывная оптимизация, смотрите и добавляйте звёзды!

Демо

Скачать демо

Обычно используется для

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

Функции

  • Поддержка сетевых данных, сетевых изображений, локальных изображений, запросов к базе данных и файлового ввода-вывода.
  • Поддержка межактивности предварительной загрузки.
  • Поддержка обновления по запросу (DataLoader перезагружается один раз, после завершения загрузки вызывается обратный вызов для всех DataListener).
  • Поддерживает настраиваемый пул потоков.
  • Поддерживает один загрузчик (DataLoader) для нескольких слушателей (DataListener).
  • Поддерживает несколько задач предварительной загрузки для одной Activity.
  • Поддерживает добавление/удаление слушателя динамически.

Изображение

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

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

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

//после завершения загрузки данных DataListener.onDataArrived(...) будет вызван для обработки данных
class Listener implements DataListener<String> {
    @Override
    public void onDataArrived(String data) {
        // этот метод выполняется в основном потоке, обработчик не требуется
        Toast.makeText(activity, data, Toast.LENGTH_SHORT).show();
    }
}
  1. Обновите данные: DataLoader.loadData() будет вызван, и DataListener.onDataArrived() будет вызван для всех слушателей:
PreLoader.refresh(preLoaderId);
  1. Уничтожьте объект PreLoader, если он вам больше не нужен (например, активность уничтожена):
PreLoader.destroy(preLoaderId);
  1. Запустите группу задач предварительной загрузки с GroupedDataLoader и GroupedDataListener:
//запустите задачу предварительной загрузки с группой GroupedDataLoader(s)
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
``` **Строка loadData()**

    TimeWatcher timeWatcher = TimeWatcher.obtainAndStart("GroupedDataLoader1 загружает данные");
    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 загружает данные");
    try {
        Thread.sleep(400);
    } catch (InterruptedException ignored) {
    }
    return timeWatcher.stopAndPrint();
}

**@Override**

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

// Слушаем данные в Activity после инициализации UI с помощью GroupedDataListener(s) для каждого GroupedDataLoader(s).
// GroupedDataListener сопоставляется с GroupedDataLoader по ключу.
PreLoader.listenData(preLoaderId, new DataHolder1(), new DataHolder2());

class DataHolder1 реализует GroupedDataListener<String> {

**@Override**

public void onDataArrived(String data) {
    String s = allTime.stopAndPrint();
    logTextView.append(data + "\n" + s + "\n");
}

**@Override**

public String keyInGroup() {
    return "loader1";
}
}

class DataHolder2 реализует GroupedDataListener<String> {

**@Override**

public void onDataArrived(String data) {
    String s = allTime.stopAndPrint();
    logTextView.append(data + "\n" + s + "\n");
}

**@Override**

public String keyInGroup() {
    return "loader2";
}
}
## Лучше использовать с компонентной архитектурой (CC)

[CC](https://github.com/luckybilly/CC) — это фреймворк с AOP на уровне компонентов: когда компонент вызывает запуск активности, вы можете запустить предварительную загрузку для него. Таким образом, вам не нужно выполнять предварительную загрузку в каждом месте, где вы хотите запустить активность.

1. Определите компонент для открытия активности.
```java
public class ComponentA реализует IComponent {

    @Override
    public String getName() {
        return "demo.ComponentA";
    }

    @Override
    public boolean onCall(CC cc) {
        int preLoaderId = PreLoader.preLoad(new Loader());
        Intent intent = new Intent(this, PreLoadBeforeLaunchActivity.class);
        intent.putExtra("preLoaderId", preLoaderId);
        startActivity(intent);
        CC.sendCCResult(cc.getCallId(), CCResult.success());
        return false;
    }
}

Вызовите этот компонент через CC, чтобы открыть активность.

// предварительная загрузка здесь не нужна, логика компонента полностью внутри самого компонента
CC.obtainBuilder("demo.ComponentA").build().call();

Комментарии ( 0 )

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

Введение

Предварительная загрузка: мощное средство для оптимизации скорости запуска Android-страницы. Данные предварительно загружаются до открытия Activity, и после завершения инициализации UI-макета Activity отображаются предварительно загруженные данные, что значительно сокращает время запуска. Если вам это помогло, пожалуйста, поддержите проект на ... Развернуть Свернуть
Apache-2.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