Выполнение длительной операции в обработчике кнопки на Android?
Здравствуйте!
У меня есть кнопка, при нажатии на которую должна выполняться длительная операция, и новые полученные данные выводятся и обновляются в TextField. Однако, на практике, приложение зависает. Пробовал делать Thread.sleep(1000), но суть от этого не меняется.
Подскажите, что нужно сделать, чтобы решить эту проблему.
либо использовать AsyncTask — что достаточно удобно.
либо можно запустить свой тред — и в нем выполнить.
что-то примерно такое:
public class WorkerThread {
private static WorkerThread instance;
HandlerThread thread;
Looper looper;
Handler handler;
public WorkerThread() {
thread = new HandlerThread(«worker for gdx»);
thread.start();
looper = thread.getLooper();
handler = new Handler(looper);
}
public static WorkerThread getInstance(){
if (instance == null)
instance = new WorkerThread();
return instance;
}
public void post(Runnable r){
handler.post®;
}
public void postDelayed(Runnable r, long delayMillis){
handler.postDelayed(r, delayMillis);
}
public void dispose(){
thread.quit();
instance = null;
}
}
в этом случае — в тред можно добавлять несколько задач — они будут выполняться одна за одной.
но если потом надо будет что-то выполнить в UI-треде (например, всё взаимодействие с UI должно происходить в UI-треде — иначе ексепшены) — то надо использовать метод Activity: runOnUiThread(Runnable r)
либо View: post(Runnable r)
все длительные операции нужно выносить в отдельный поток аля thread/asyncktask/service и т.д, иначе получить сообщения аля приложение перестало отвечать.