そのため、私はさまざまな入力と出力を備えたPlanモデルを備えたアプリに取り組んでいます。アプリのレイアウトには、入力用のスライダーコントロールと、出力用のラベルがあります。入力が変更されると、モデルが更新され、モデルが計算を実行してから、ビューを更新します。最初はこのアーキテクチャに問題があるとは思いませんでしたが、単純な計算でも実行速度が非常に遅く、UIスレッドがブロックされているようです。確かに、私は物事を更新するためのやや複雑な方法を持っています:
- Slider(ビューグループサブクラス内)はその値を更新し、デリゲート(そのビューグループサブクラスに固有のインターフェイスを実装する)にメッセージを送信します。
- Delegate(モデルとコントロールサブビューを保持する)は、Planインスタンスに新しい値を設定するように指示します。これにより、Planはその出力を再計算します。
- プランが計算を完了すると、デリゲートに別のメッセージを送信します。デリゲートは、出力ビューに新しい値で更新するように指示します。
私が開発したiOSアプリからこのアーキテクチャをモデル化しましたが、計算の実行にそれほど大きな問題はないようです。
さて、AndroidはiOSとは大きく異なることを知っているので、これについて完全に間違っているのではないかと思います。これらのビューに、プランモデルの変更を監視してから、表示されるはずの値を取得するように指示する方法はありますか?
ここで私が見ているもう1つの大きな問題は、スライダー入力に関するものです。モデル更新の計算をスレッドに入れると、スライダーが変更されるたびに、新しいスレッドが作成されます。これらのスレッド(私が見てきたように)は、多かれ少なかれランダムな順序で終了し、増分変更が表示される必要があるときにほとんど意味がないような方法でビューを更新します。シークバーで変更可能であると思われる計算をスレッド化する良い方法はありますか?