Как и другие ответы сказали, Android не поточно, что означает:
- Вы не можете манипулировать пользовательский интерфейс из фонового потока
- Вы не можете делать тяжелые задачи в потоке пользовательского интерфейса
Другие операции такого рода могут включать обработку больших объемов данных/манипулирование базой данных/HTTP-запросы/управление сетью. Действительно, я считаю, что все, что не требует потока пользовательского интерфейса, но требует большого времени обработки, должно быть перемещено в отдельный поток.
Это логично, потому что если вы будете выполнять тяжелую обработку, пользователь почувствует задержку, и пользовательский опыт будет скомпрометирован (и, конечно, может быть определенно использован для перегрузки системы и т. Д.). Следовательно, система убьет процесс и выдаст сообщение об ошибке сот.
В результате вы хотите использовать задачу Async.
Async Task действительно просто открывает новую тему, на которой вы можете выполнять тяжелую обработку или сетевые подключения. Для сетевых подключений я рекомендую использовать AsyncClients like this one, которые реализуют AsyncTask в более удобном для вас формате. Существуют также библиотеки, такие как UniversalImageLoader, которые позволят вам загружать изображения в сетки/списки.
Я также настоятельно рекомендую вам прочитать official Android documentation discussing this, и есть полезный post on the Android blog об этом. Наконец, мне кажется, что this post может быть вам полезен, так как он может содержать ошибку, с которой вы столкнулись (ошибка, потому что вы выполнили операцию в потоке пользовательского интерфейса).
Другие ресурсы Я нашел:
В заключение, here is an example of an AsyncTask being used. (красиво поставленный ответ от @Graham Smith).