0

WifiDirectでデータを転送したい。

そこで、2 台のデバイスを接続し、1 台のデバイスで SeverSocket を開きました。アクティビティのボタンをクリックして他のデバイスからこの ServerSocket に接続したい場合 (そこでグループ所有者の IP でソケットを開きます)、「ソケット接続を開くことができませんでした」というメッセージが表示されます。

アクティビティの buttenClicked メソッドでコードを実行する代わりに、IntentService を開いてそこでコードを実行すると、完全に機能します。

アクティビティではなく IntentService でソケットを開くことができないのはなぜですか?

4

1 に答える 1

1

Android では、UI スレッドで長時間実行されるタスクを実行することはできません。インテント サービスが別のスレッドで実行されている間、ボタン クリックは UI スレッドで実行されているため、serversocket はクライアントが接続するまで待機できますが、UI スレッドでは実行できません。

したがって、将来のアプリでは、スレッドを長時間停止する可能性のあるタスクがあるときはいつでも、intentservice または asynctask または Java の通常のスレッド クラスのいずれかを使用して別のスレッドで実行します。

于 2013-06-20T17:15:50.650 に答える