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

OSCHINA-MIRROR/quella01-handle-message

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

Handle-message

Введение

Handle-message — это Java SDK для многопоточной коммуникации, вдохновлённый механизмом Handle в Android. Он прост в использовании и обладает мощными функциями.

В большинстве случаев, когда мы хотим получить результат от дочернего потока в основном потоке, мы используем Thread.join(). Однако этот метод может привести к блокировке, и иногда мы не хотим ждать завершения дочернего потока перед продолжением выполнения основного потока. Вкратце, нам нужна асинхронная коммуникация, и handle-message решает эту проблему.

Без лишних слов, давайте рассмотрим пример кода:

// Подготовка Looper в главном потоке
Looper.prepareMainLooper();

// Создание Handler
final MainHandler handler = new MainHandler();

// Запуск пула потоков
Executor executor = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
    final int position = i + 1;
    System.out.println(i);

    executor.execute(new Runnable() {
        @Override
        public void run() {
            try {
                // Дочерний поток передаёт задачу основному потоку
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        System.out.println(Thread.currentThread().getName() + " : " + position);
                    }
                }, 1000);

                Thread thread = Thread.currentThread();
                // Дочерний поток отправляет сообщение основному потоку
                Message.obtain(handler, position, position, position, "Главный поток, привет! Я поток: " + thread.getName()).sendToTarget();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}
/**
 * Обработка сообщений, отправленных дочерними потоками в основном потоке
 */
private static class MainHandler extends Handler {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case WhatConstants.WHAT_ONE:
                String obj1 = (String) msg.obj;
                System.out.println(obj1);
                break;
            case WhatConstants.WHAT_TWO:
                String obj2 = (String) msg.obj;
                System.out.println(obj2);
                break;
            case WhatConstants.WHAT_THREE:
                String obj3 = (String) msg.obj;
                System.out.println(obj3);
                break;
            case WhatConstants.WHAT_FOUR:
                String obj4 = (String) msg.obj;
                System.out.println(obj4);
                break;
            case WhatConstants.WHAT_FIVE:
                String obj5 = (String) msg.obj;
                System.out.println(obj5);
                break;
            case WhatConstants.WHAT_SIX:
                String obj6 = (String) msg.obj;
                System.out.println(obj6);
                break;
            case WhatConstants.WHAT_SEVEN:
                String obj7 = (String) msg.obj;
                System.out.println(obj7);
                break;
            case WhatConstants.WHAT_EIGHT:
                String obj8 = (String) msg.obj;
                System.out.println(obj8);
                break;
            case WhatConstants.WHAT_NINE:
                String obj9 = (String) msg.obj;
                System.out.println(obj9);
                break;
            case WhatConstants.WHAT_TEN:
                String obj10 = (String) msg.obj;
                System.out.println(obj10);
                break;
        }
    }
}

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

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

Введение

Handle-message — это Java SDK для многопоточной коммуникации, реализованный по аналогии с механизмом Handle в Android. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/quella01-handle-message.git
git@api.gitlife.ru:oschina-mirror/quella01-handle-message.git
oschina-mirror
quella01-handle-message
quella01-handle-message
master