Как я могу имитировать различные типы загрузки на устройстве Android? - программирование
Подтвердить что ты не робот

Как я могу имитировать различные типы загрузки на устройстве Android?

Я пытаюсь проверить поведение своего приложения в разных ситуациях, например, скажем, что используется много оперативной памяти и процессора, или сеть потребляется некоторыми другими приложениями или батареей, которая отбирается другим.

Теперь, я хочу сказать, что хочу (100-X)% ОЗУ, которое нужно использовать (рендеринг недоступен), и мое приложение имеет только X% для использования, как я могу имитировать это и запускать свое приложение в это условие?

Аналогично, скажем, у меня есть только Y% сети из-за различных других приложений, запущенных в системе, теперь я хочу отображать (100-Y)% доступности сети для моделирования и запускать мое приложение в этом состояние.

CPU занят для (100-Z)% и доступен только Z% времени для моего приложения, которое я хочу проверить.

Это ситуации, которые я хочу имитировать. Может ли кто-нибудь показать мне инструмент или объяснить мне способ сделать это?

4b9b3361

Ответ 1

Ваше требование состоит в том, что вы хотите протестировать приложение в условиях повышенного или освобожденного состояния, которое может контролироваться вами. поэтому здесь решение, которое я вижу,

  • Вы можете разработать еще одно приложение (основное обслуживание), которое будет отвечать за увеличение или уменьшение циклов процессора, занятие или освобождение памяти и поддержание активности сети в сети (сделайте простой интерфейс для ввода входов )

    • Циклы процессора: создайте несколько потоков, которые будут выполнять Float операций и потребляют много циклов процессора и могут спать, когда не требуется

    • Память: нужно написать код C (malloc для выделения памяти указателям) и получить доступ к этому через JNI и функцию для выпуска одна и та же. используйте функцию памяти из java для мониторинга текущего использования.

    • Сеть. Задайте задачу загрузки огромного количества файлов из Dropbox или другого сервера, когда это необходимо, и следите за состоянием по мере необходимости.

после этой конфигурации запустите службу, запустите нужное приложение и проверьте в этом состоянии.

Ответ 2

Для проверки производительности вашего приложения вы можете использовать средства трассировки отладки. И проверить это Как проверить производительность приложения Android?

А также эта ссылка предоставляет некоторые инструменты для тестирования производительности приложений.

Вы можете использовать некоторые приложения, подобные этим, или вы можете написать какое-нибудь приложение для проведения стресс-тестирования с использованием процессора и оперативной памяти.

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

Ответ 3

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

ОЗУ - каждый процесс будет иметь свою собственную память, так как в android память за процесс. Этот предел кучи dalvik - это гарантированный объем памяти, которую VM предоставляет приложению. Никакое другое приложение не навязывает этому пределу. Однако есть и нативная куча, которая является общей для всех приложений и процессов.

Сеть. Недостаток доступности сети можно моделировать, запуская приложение на устройстве, которое подключается к веб-серверу и обменивается сообщениями фиксированного размера с фиксированными интервалами.

CPU - Процессорные циклы, которые присуждаются вашему приложению, безусловно зависят от нагрузки, которую другие приложения загружают в CPU, но полностью зависят от операционной системы, чтобы решить, как запланированы циклы процессора. Чтобы убедиться, что ваше приложение получает только Z% от времени процессора, будет в лучшем случае приблизиться.

Если ваше требование - проверить производительность вашего приложения (с учетом влияния других приложений на устройстве), вы можете попробовать http://www.littleeye.co. Он предоставляет данные о производительности (Memory-Dalvik + Native, Network-2G + 3G + Wifi, Cpu cycle и Power) вашего конкретного приложения из других приложений на устройстве. Он может собирать данные для сборки apks release, что означает, что вы можете протестировать производительность конечного продукта.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я связан с Лабораторией Маленького Глаза

Ответ 4

Я тоже столкнулся с этой проблемой. Там были некоторые совместимые с Posix инструменты генерации нагрузки. Я считаю, что стресс является привлекательным инструментом, поскольку он позволяет вам контролировать нагрузку на процессор или IO. Чтобы максимально использовать это, я пишу обертку вокруг него, чтобы установить объем создаваемой нагрузки.

Здесь двоичный скомпилирован для android.

Здесь исходный сайт, страница проекта стресса

Ответ 5

Благодаря @Dinesh Prajapati это мне очень помогает, я написал класс потоков для вычисления с плавающей запятой, и процент простоя процессора значительно снизился, как я и ожидал. Я хотел бы поставить свое решение здесь для справки:

@Override
    public void run() {
        Random rd = new Random();
        float a, b;
        int x, y;
        @SuppressWarnings("unused") double r;
        while (run) {
            x = rd.nextInt(20) + 20;
            y = rd.nextInt(20) + 20;
            a = rd.nextFloat();
            b = rd.nextFloat();
            //noinspection UnusedAssignment
            r = Math.pow(a + x, b + y) / Math.tan((double) (a + x) / (b + y));
        }
    }

Большое спасибо.