Я понимаю, что сетевые вызовы и доступ к sqlite лучше всего выполнять через рабочие потоки. В моем случае мои сетевые вызовы выполняются через Okhttp, а sqlite выполняется через один рабочий поток.
Итак, вот моя проблема. У меня есть основное действие, которое содержит все акции, которые пользователь купил в списке. Каждый раз, когда создается это новое действие, метод onCreate
будет просматривать акции в базе данных и обновлять их одну за другой, а затем обновлять список.
Это, конечно, слишком сильно нагружает основной поток. Но моя проблема в том, как я могу спроектировать это лучше? Прямо сейчас у меня есть что-то вроде этого в onCreate
:
Thread t1 = new Thread(new Runnable{
@Override
public void run(){
// access sqlite
positionsArray = retrieveStocks();
}
});
t1.start();
t1.join(); //try catch omitted
Thread t2 = new Thread(new Runnable{
@Override
public void run(){
// use Okhttp to get data
positionsArray = refreshStocks();
}
});
t1.start();
t2.join(); //try catch omitted
adapter = new PositionsAdapter(this, positionsArray);
listview.setAdapter(adapter);
Это не устраняет проблему, потому что основной поток все еще должен ждать t1
и t2
. Любые дизайнерские предложения относительно того, как я могу решить эту проблему?
join()
из потока пользовательского интерфейса? Вызовjoin()
приостанавливает текущий поток до завершения другого потока. Это означает, что ваши потоки не имеют никакой пользы. - person adelphus   schedule 19.05.2016