Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для мобильных телефонов > Android

Android Разработка игр на платформе Android

Ответ
 
Опции темы
Старый 13.09.2015, 05:47   #1
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,317
Написано 461 полезных сообщений
(для 827 пользователей)
Java Event System

Всем привет.

Поработав в с#, я пристрастился к его системе событий
public event EventHandler<MyEventArgssomeEvent;
....
if (
someEvent != null) {
  
someEvent(this, new MyEventArgs(1"hi"));

Решил написать аналог для джавы (не искал подобные решения, просто хотел сам сделать).
В итоге - есть репозиторий, кому интересно, попробуйте.
Репозиторий в github

Что внутри
  • Event & SimpleEvent - объект "событие", который будет генерировать событие.
  • IEventListener - слушатель, который подписывается на собития и ловит их сигналы.
  • EventSystem - вспомогательный класс, который позволяет отписаться от всех слушателей у всех событий конкретного объекта, который нужно (например) удалить (вызывать отписку нужно вручную, зато всего 1 строчка).

Как использовать

Рекомендуется объявлять объекты событий как 'public final', т.е. создавать их при создании самого объекта, чтобы слушатели могли подписаться на них в любой момент.

public final Event<MyEventArgseventSomethingHappen EventSystem.newEvent(this); 
Если будете использовать EventSystem, то объект с событием должен включать интерфейс IWithEvents.
Этот интерфейс пока пустой, используется для единообразия (возможно, это лишнее, я пока не решил).

Можем подписаться на созданное выше событие и обработать его:

myObj.eventSomethingHappen.subscribe(listener);
...
private final 
IEventListener<MyEventArgslistenerForSomethingHappen = new IEventListener<MyEventArgs>() {
  @
Override
  
public void onReceived(Object senderMyEventArgs args) {
    
// достаём какие-то данные из args, если надо
    // что-то делаем
    // отписываемся от события, если надо
  
}
}; 
Когда объект с событиями нужно удалить, мы можем отписать все его события от всех слушателей всего 1й строкой кода (при условии, что события создавали через EventSystem)

EventSystem.remove(this); // удаление из системы событий, а не из памяти 
Перед закрытием приложения можно использовать отвязку событий всех объектов

EventSystem.removeAllObjects(); 

Последний раз редактировалось Жека, 13.09.2015 в 06:12. Причина: переименовал EventHandler в Event
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 02:44.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com