Как уменьшить нагрузку на процессор приложения в телефоне Android?

1

Я разработал приложение вызова auto-. Приложение читает текстовый файл, который содержит список телефонных номеров и вызывает несколько секунд, завершает вызов, а затем повторяет.

Моя проблема в том, что приложение не отправляет вызовы через 10-16 часов. Я точно не знаю причины, но я думаю, что проблема в использовании ЦП. Загрузка моего приложения почти на 50%! Как уменьшить использование ЦП?

Вот часть исходного кода:

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 несколько раз.

  • 0
    Невозможно определить, учитывая, что мы не знаем, что происходит в вызываемых вами функциях, почему вы используете 50% ЦП. Если вы хотите простой способ снизить среднюю загрузку процессора, вы можете просто увеличить время задержки до более чем 60 секунд.
  • 0
    Что делает TimeDelay() ?
Показать ещё 1 комментарий
Теги:
reduce
cpu-usage

2 ответа

4

Причина, по которой он использует 50% вашего процессора, заключается в том, что Android, по-видимому, не позволит ему использовать 100% процессора, который обычно будет иметь такой же цикл, как у вашего TimeDelay(). (Или у вас есть два процессора, и на самом деле он использует 100% одного процессора.) То, что вы делаете, называется ожидание ожидания и должно быть очевидно, почему постоянная проверка состояния будет использовать множество процессоров. Так что не делай этого. Вместо этого используйте Thread.sleep(). Тогда ваше приложение не будет использовать никакой процессор во время ожидания.

Кроме того, ради Бога, почему вы передаете строку, а затем parseInt ing, а не просто передаете Integer в первую очередь?: -)

1

Если ваш метод занимает много времени, особенно цикл while. Вы должны положить Thread.sleep(50) внутри своего цикла. Это заставляет процессор обрабатывать другие процессы.

Ваш процессор будет уменьшен. Не уверен, но вы должны попробовать. Надеюсь, вы получите хороший результат.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню