Android中的线程化数据库操作

问题描述

假设我们要在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对象。通过这种实现,我看到了两个问题/问题:

  1. 这仅执行一个数据库操作。如果我们想执行所有CRUD任务,则似乎必须拥有一组Runnable类来处理所有这些任务。有没有解决的办法,还是我们需要修改设计模式?

  2. 数据库对象是在UI线程上创建的,这使我想知道这是否会引起问题。如果数据库在主线程上运行,这是否意味着与之交互的任何操作也会在该主线程上进行?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)