У меня есть небольшое приложение для Android, в котором мне нужно делать некоторые действия по FTP каждые пару секунд. Узнав на собственном горьком опыте, что запуск сетевых материалов в потоке пользовательского интерфейса - это то, что Android не очень любит, я пришел к следующему решению:
// This class gets declared inside my Activity
private class CheckFtpTask extends AsyncTask<Void, Void, Void> {
protected Void doInBackground(Void... dummy) {
Thread.currentThread().setName("CheckFtpTask");
// Here I'll do the FTP stuff
ftpStuff();
return null;
}
}
// Member variables inside my activity
private Handler checkFtpHandler;
private Runnable checkFtpRunnable;
// I set up the task later in some of my Activitiy's method:
checkFtpHandler = new Handler();
checkFtpRunnable = new Runnable() {
@Override
public void run() {
new CheckFtpTask().execute((Void[])null);
checkFtpHandler.postDelayed(checkFtpRunnable, 5000);
}
};
checkFtpRunnable.run();
Является ли хорошей практикой выполнение повторяющейся задачи, которая не может выполняться напрямую в потоке пользовательского интерфейса? Кроме того, вместо постоянного создания нового объекта AsyncTask вызовом
new CheckFtpTask().execute((Void[])null);
можно ли создать объект CheckFtpTask
один раз, а затем использовать его повторно? Или это даст мне побочные эффекты?
Заранее спасибо, Йенс.