Да, вы должны использовать асинхронный доступ, это лучшая практика.SDK содержит AsynchTask специально для этого.
BuyAsyncTask extends AsyncTask<Item, Void, Item> {
@Override
protected Item doInBackground(Item... params) {
..use DB here
}
@Override
protected void onPreExecute() {
..some easy operation befor start thread
}
@Override
protected void onPostExecute(Item resultTask) {
..do what you want, thread is finish
}
}