Я читал о потоках в Android Studio и хотел задать несколько вопросов. Обязательны ли потоки в моем приложении, чтобы избежать задержек, или только когда вы делаете действительно большие и потребляющие приложения? Я спрашиваю об этом, потому что у меня небольшая задержка в моем приложении, и я хотел знать, не потому ли, что я не использовал потоки. Не думаю, что это из-за того, что я делал бесполезные вещи, я был очень бдителен.

-2
Never Mind 21 Окт 2015 в 12:02

2 ответа

Лучший ответ

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

...
// takes 500ms to complete could be a network operation/could be accessing camera, 
// initializing recorder etc. (Initalizing recorder takes 100ms most of the time)
   doSomeTimeIntensiveTask(); 
...

В таких случаях вам нужно будет выполнить эту задачу в другом потоке, а не в своем потоке UI / MAIN, потому что для конечного пользователя, использующего приложение, ЕСЛИ вы должны были выполнить это в потоке UI / MAIN, он / она заметит временная задержка как вид заикания / запаздывания, что в целом ухудшает работу пользовательского интерфейса.

Кроме того, существуют задачи, такие как создание HTTP-запроса, для фактического завершения которых требуется неопределенное количество времени, в таких случаях, если такие задачи были выполнены в потоке UI / MAIN, тогда приложение будет ЗАКРЫТО, пока задача не будет завершена, что иногда вызывает ОС Android для отображения всплывающих сообщений, таких как the application doesn't seem to be responding do you want to force close the app? или других подобных сообщений, что опять-таки плохо для пользователя.

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

1
Bhargav 21 Окт 2015 в 09:22

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

В целом, однако, основные причины для создания дополнительных потоков (помимо тех, которые уже используются во фреймворке), это если вы выполняете тяжелые операции, такие как ввод-вывод (тяжелое чтение / запись или http), графика или действительно сложные вычисления. .

Изучите процессы и потоки и AsyncTask.

Кратко процитируем наиболее важную часть этого вопроса:

Когда ваше приложение выполняет интенсивную работу в ответ на взаимодействие с пользователем, эта модель с одним потоком может привести к низкой производительности, если вы не реализуете свое приложение должным образом. В частности, если все происходит в потоке пользовательского интерфейса, выполнение длинных операций, таких как доступ к сети или запросы к базе данных, блокирует весь пользовательский интерфейс. Когда поток заблокирован, никакие события не могут быть отправлены, включая события рисования. С точки зрения пользователя приложение кажется зависшим. Хуже того, если поток пользовательского интерфейса блокируется на несколько секунд (в настоящее время около 5 секунд), пользователю предоставляется печально известный диалог «приложение не отвечает» (ANR). Затем пользователь может решить выйти из вашего приложения и удалить его, если он недоволен.

1
Michael A. 21 Окт 2015 в 09:17