#android #database #multithreading
#Android #База данных #многопоточность
Вопрос:
Если у меня есть база данных, в которую я записываю данные шаг за шагом (с интервалом в 5 минут), и как только я записываю новые данные в БД, у меня есть клиентский поток, который берет их оттуда и отправляет на удаленный сервер.
Проблема в том, как я мог это сделать: записать данные, позволить клиентскому потоку, чтобы я записал новые данные … и так до тех пор, пока я не закончу запись данных в DB?
Запись данных в базу данных выполняется в onCreate(), только часть отправки выполняется в новом потоке. Спасибо
Ответ №1:
как насчет использования очереди: BlockingQueue mQueue=new LinkedBlockingQueue();
private class RemoteWriter implements Runnable{
private final BlockingQueue queue;
RemoteWriter(BlockingQueue q) { queue=q;}
public void run() {
try {
while (true) {processObject(queue.take());}
} catch (InterruptedException ex) { //do something
}
}
void processObject(Object o) {
//write it to your server
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RemoteWriter rw=new RemoteWriter(mQueue);
new Thread(rw).start();
// rest of your code
}
Затем в вашем рабочем потоке (или потоке пользовательского интерфейса) просто поместите материал в очередь.