Итак, я работал над приложением, которое имеет модель Plan с несколькими различными входами и выходами, а макет приложения имеет элементы управления ползунком для входов и метки для выходов. Когда ввод изменяется, он обновляет модель, которая затем выполняет расчет, а затем обновляет представления. Сначала я не думал, что с этой архитектурой что-то не так, но даже простые вычисления, кажется, выполняются очень медленно, блокируя поток пользовательского интерфейса. Конечно, у меня есть несколько сложный способ обновления вещей:
- Ползунок (в подклассе группы просмотра) обновляет свое значение и отправляет сообщение делегату (который реализует интерфейс, специфичный для этого подкласса группы просмотра).
- Делегат (который содержит модель и контрольные подпредставления) говорит экземпляру плана установить новое значение, которое запускает план для пересчета его выходных данных.
- Как только план завершает свои расчеты, он отправляет делегату еще одно сообщение, которое затем указывает его выходным представлениям обновляться с новыми значениями.
Я смоделировал эту архитектуру на основе разработанного мной приложения для iOS, которое, по-видимому, не представляло большой проблемы при выполнении вычислений.
Теперь я знаю, что Android значительно отличается от iOS, поэтому мне интересно, пойду ли я по этому поводу совершенно неправильно. Есть ли способ просто сказать этим представлениям наблюдать за моделью плана на предмет изменений и затем получить значение, которое должно отображаться?
Еще одна важная проблема, которую я вижу здесь, связана с вводом ползунка. Если я помещу вычисления обновления модели в поток, каждый раз, когда изменяется ползунок, будет создаваться новый поток. Эти потоки (как я видел) будут более или менее завершаться в случайном порядке, обновляя представление таким образом, что слишком мало смысла, когда вы должны увидеть постепенные изменения. Есть ли хороший способ выполнения многопоточных вычислений, которые должны изменяться с помощью панели поиска?