1. メイン UI スレッドがあり、ライブラリ関数を使用しています。
MainUI {
library.funcA(1);
library.funcB(2,3);
}
メインスレッドが各呼び出しの終了を待たないようにします。また、呼び出しごとに新しいスレッドを作成することは効果がなく、スレッドセーフではないため、別の同じスレッドで実行したいと考えています。そこで、単一のメッセージ キュー / ハンドラを持つ別のスレッドを作成しました。
MainUI {
handler.post(new Message(FUNC_A,[1]));
handler.post(new Message(FUNC_B,[2,3]));
}
しかし、毎回新しい Message オブジェクトを作成し、handleMessage() で再度デコードする必要があるというオーバーヘッドがあるようです。さらに、さまざまな数の引数のパック/アンパックを処理するのは見苦しく見えます。すべての関数を Runnable にしてハンドラーに投稿することを考えましたが、関数には異なる引数があり、Runnable クラスを拡張する新しいクラスを作成する必要があります。
私の現在の計画は、同期化されたキーワードをライブラリ内のすべての関数に挿入して、スレッドが 1 つずつ実行されるようにすることですが、多くのスレッドの作成/消滅が嫌いで、システムが重くなります (スレッドセーフでもありません)。意見が聞きたいです。
2. ライブラリが (メイン スレッドだけでなく) 多くのスレッドから呼び出される場合、呼び出しをライブラリ自体の単一スレッドで実行するように変換する最良の方法は何ですか?