生成されたネットワーク スレッドが、メイン スレッドで実行されることが確実な関数呼び出しを行う場合、これを実現する唯一の方法は、ある種の共有リソースを使用することです。最も一般的な方法は、ある種のワーク キュー、ソケット、または2 つのスレッド間で共有される (メソッド呼び出しによって設定される) 変数で、特定のメソッドを実行するためにメイン スレッドによってポーリングされる必要があります。
最も簡単な方法はワークキューだと思いますが、コメントに投稿したリンクによると、通常は TCP/IP ソケットを使用する JSON に言及しています。それぞれの方法が通常どのように機能するかについて説明します。
ワーク キュー:
ネットワーク スレッドは何らかの作業エントリを作成し、メイン スレッドの作業キューに入れます。メイン スレッドがメソッド (onStartCommand()) の途中にある場合、作業エントリも実行できません。ほとんどの場合、現在のメソッドが終了すると、キューからエントリを取得するポーリング メソッドに戻ります。したがって、このアプローチが使用される場合、onSuccess() と onFailure() は、onStartCommand() から戻った後に実行される作業エントリを作成してキューに入れます。
JSON ソケット:
このアプローチはワーク キューに非常に似ていますが、ワーク エントリの代わりにソケット メッセージが使用されます。また、ソケットを (ほとんどの場合 select() または poll() を介して) ポーリングし、受信したメッセージを作業項目として扱う関数があります。したがって、このアプローチが使用される場合、onSuccess() と onFailure() は、onStartCommand() から戻った後に実行されるソケット メッセージを作成して送信します。