1

自動通話アプリケーションを開発しました。アプリは、電話番号リストを含むテキストファイルを読み取り、数秒間電話をかけ、電話を終了してから繰り返します。

私の問題は、アプリが10〜16時間後に電話を送信しないことです。理由はよくわかりませんが、CPU使用率が問題だと思います。私のアプリのCPU使用率はほぼ50%です!CPU使用率を減らすにはどうすればよいですか?

ソースコードの一部は次のとおりです。

if(r_count.compareTo("0")!=0) {
    while(index < repeat_count) {
        count = 1;
        time_count = 2;

        while(count < map.length) {
           performDial();   //start call
          reject();                   //end call
          finishActivity(1);
          TimeDelay("60");            // wait for 60sec
          count = count + 2;
          time_count = time_count + 2;
          onBackPressed();            // press back button for calling next number
          showCallLog();
          finishActivity(0);
       }
      index++;
}

これはTimeDelay()メソッドソースです:

public void TimeDelay(String delayTime) {

    saveTime = System.currentTimeMillis()/1000;
    currentTime = 0;
    dTime = Integer.parseInt(delayTime);

    while(currentTime - saveTime < dTime) {
        currentTime =  System.currentTimeMillis()/1000;

    }

}

TimeDelay()whileループで数回繰り返されます。

4

2 に答える 2

4

CPU の 50% を使用している理由は、Android が CPU の 100% を使用できないように見えるためです。これは、TimeDelay()通常のようなループです。(または、2 つの CPU があり、実際には 1 つの CPU を 100% 使用しています。) あなたがしていることはビジー待機と呼ばれ、状態を継続的にチェックすると大量の CPU が使用される理由は明らかです。だから、それをしないでください。Thread.sleep()代わりに使用してください。待機中、アプリは CPU をまったく使用しません。

また、神のために、そもそもparseInt単に an を渡すのではなく、なぜ文字列を渡してからing するのですか? Integer:-)

于 2011-06-04T04:56:04.200 に答える
1

メソッドの終了に時間がかかる場合、特に while ループ。Thread.sleep(50)ループ内に配置する必要があります。これにより、プロセッサが他のプロセスを処理できるようになります。

CPU が削減されます。確かではありませんが、試してみてください。良い結果が得られますように。

于 2012-09-12T10:39:12.263 に答える