问题描述
假设我们要在Android应用中执行一些数据库操作。我遇到的最简单的方法之一是使用HandlerThread
对象创建一个新线程,然后使用其循环程序执行一个Runnable
对象。像这样:
public class DatabaseQueryRunnable implements Runnable {
private ArrayList<Photo> photos;
BaseDatabase database;
private String name;
public DatabaseQueryRunnable(BaseDatabase database,ArrayList<Photo> photos,String name)
{
this.database = database;
this.photos = photos;
this.name name;
}
@Override
public void run() {
ArrayList<Photo> tmp = new ArrayList<>();
tmp = database.getPhotos(name);
photos.addAll(tmp);
}
}
在用户界面线程上:
public ArrayList<Photo> getPhotos(Context context,String name)
{
HandlerThread handlerThread = new HandlerThread("Database");
handlerThread.start();
Handler handler = new Handler(handlerThread.getLooper());
ArrayList<Photo> albums = new ArrayList<>();
handler.post(new DatabaseQueryRunnable(albumDatabase,albums,name));
return albums;
}
在此示例中,我们将更新从UI线程传递的ArrayList
对象,以及已经在主线程上创建的DB对象。通过这种实现,我看到了两个问题/问题:
-
这仅执行一个数据库操作。如果我们想执行所有CRUD任务,则似乎必须拥有一组
Runnable
类来处理所有这些任务。有没有解决的办法,还是我们需要修改设计模式? -
数据库对象是在UI线程上创建的,这使我想知道这是否会引起问题。如果数据库在主线程上运行,这是否意味着与之交互的任何操作也会在该主线程上进行?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)