Итак, видя, что этот ответ получает все больше и больше голосов, я решил, что должен взять это на себя, чтобы улучшить качество ответа.Когда я смотрю на оригинал, я не вижу реального «ответа» на вопрос «в чем проблема в моем коде?».Я оставляю исходный ответ без изменений ниже, чтобы сохранить связь, что, как я предполагаю, вызвало популярность ответов.
Обновленный ответ
Вероятно, вы нарушаете «однопоточную модель».Android UI Toolkit не является потокобезопасным, и им следует манипулировать только из «основного» потока пользовательского интерфейса.В Android есть несколько полезных методов, которые вы можете использовать, чтобы убедиться, что ваши пользовательские операции выполняются в потоке пользовательского интерфейса.Большинство деталей об этих вызовах методов можно найти в сообщении блога Android Painless Threading (ссылка на которое содержится в слове «один» ниже, и здесь для быстрого ознакомления).
Просмотр вашегокод, конкретное нарушение, которое я вижу, заключается в том, что ProgressDialog
создается в том, что, скорее всего, поток пользовательского интерфейса, который затем отклоняется во вновь созданном фоновом потоке.
Вы бы лучше инкапсулировали свой фоновый методв Runnable
и использовании View#post(Runnable)
для выполнения работы в фоновом режиме.
Помните, что есть много способов сделать фон, поэтому взгляните на то, что доступно, ииспользуйте то, что кажется правильным для вашей ситуации.
Оригинальный ответ
Взгляните на один из многих учебников о том, как сделать асинхронных работы в Android .
Кроме того, вот некоторые другие вопросы StackOverflow, которые похожи
Progress diaпроблема с журналом в Android
Диалог хода выполнения при открытой активности
Диалог хода выполнения при запуске новой операции
Android: спиннер Progress Dialog не вращается
Обновление диалогового окна прогресса
android: отображение диалога прогресса