2

私のアプリでは、datagramSocket、1 つのサーバーソケット、およびいくつかのソケットを使用しています。Android デバイスでアプリを実行すると、電話の一部が熱くなり、多くのエネルギーが必要になります。問題の原因はソケットにあると思います。しかし、どの操作が非常にエネルギーを消費するかはわかりません。

新しいソケットを作成するには多くのエネルギーが必要ですか?

Socket so = new Socket();
ss = new ServerSocket( port );
mSocket = new MulticastSocket( port );

サーバーソケットやその他のソケットが不要になった場合は、それらを閉じることが重要ですか。

接続にはエネルギーがかかりますか?

so.connect( new InetSocketAddress(ip, port ), 1000);

また、接続後、接続には多くのエネルギーが必要ですか?(長時間データを送信しない場合は切断した方がよいでしょうか) 大量のソケットは多くのエネルギーを必要としますか?

また、いくつかのスレッドがあります。

メインスレッドと 3 つのバインダースレッドの他に、さらに 3 つのスレッドがあります。

1 番目のスレッド: データグラム ソケットで着信メッセージをリッスンします。

DatagramPacket packet = new DatagramPacket(buffer, buffer. length);
mSocket .receive(packet);

2 番目のスレッド: 複数のソケットで受信メッセージをリッスンします。

try {
      if (objectInputStreamList .size() != 0){
            if (counter >= objectInputStreamList .size()){
                 counter = 0;
             }
             ObjectInputStream ois = objectInputStreamList .get(counter);
             Object o = ois.readObject();
             if (o instanceof Message){
                 receive((Message) o);
             System.out .println("Message received in Server");
                 }
             }
     } catch (SocketTimeoutException soTOE){
        counter++;
     }

3 番目のスレッド: HTTP 要求を介して、インターネット経由でサーバーにデータを送信します。

スレッドの 1 つが多くのエネルギーを必要としますか?

アプリは、wifi がオフになっている場合や、wifi がオンになっているが wlan に接続されていない場合でも、多くのエネルギーを必要とします。したがって、接続はありません。

この操作のうち、エネルギーを消費するのはどれですか? そして、エネルギーを減らすにはどうすればよいですか?

回答ありがとうございます。

4

1 に答える 1

0

何もすることが想定されていない場合でも熱く実行されることを考えると、適切にブロックするのではなく、スレッドの 1 つが自由に実行されていると思われます。完全なソース コードがなければ、これ以上のことは言えませんが、古き良き printf デバッグが役に立つかもしれません。while ループごとに異なるログ ステートメントを配置し、プログラムを実行するだけです。ステートメントが驚くべき速さでログを埋める場合は、そこにあります。

はい、不要になったソケットは常に閉じる必要があります。たとえば、サーバー ソケットを閉じないと、ポートは占有されたままになります。最終的に、システムはポートを使い果たします。(リソースの使用や優雅さなど、他にも多くの理由を思いつくことができます。物事を整理すると、問題が明らかになる場合さえあります。)

参考までに、多くのソケットを開いたままにしても、それ自体でエネルギーを消費することはありません。ネットワーク アクティビティは少しエネルギーを消費しますが (アイドル タイマーに注意してください!)、デバイスの一部が熱くなることはありません。

于 2013-10-18T21:41:50.557 に答える