gpt4 book ai didi

android - 房间运行很慢

转载 作者:行者123 更新时间:2023-11-29 23:48:59 27 4
gpt4 key购买 nike

我正在尝试使用 Room Persistence Library 获取/存储数据。从表中获取所有数据的调用非常慢,我使用 nanoTime 将其计时为大约 1800 毫秒,我认为这太慢了。可能出了什么问题?

这里有更多信息:

  1. 表中只有 20-30 个条目。
  2. 20 个字段,其中一些由 Gson 序列化。 Gson 不是瓶颈(说 nanoTime)
  3. 测试设备运行 6.0 (Xperia M5)
  4. 房间 v1.1.1
  5. 正在使用 AsyncTask 运行查询

查询在 DbDao 中定义为

@Query("SELECT * FROM events")
List<Event> getAllEvents();

最佳答案

异步任务不适合处理 Room 数据库。我建议你使用 executor 并使用它制作一个单例类。代码如下。 导入 android.os.Looper; 导入 android.support.annotation.NonNull;

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

public class AppExecutor {
private static final Object LOCK = new Object();
private static AppExecutor sInstance;
private final Executor diskIO;
private final Executor mainThread;
private final Executor networkIO;

public AppExecutor(Executor diskIO, Executor mainThread,
Executor networkIO) {
this.diskIO = diskIO;
this.mainThread = mainThread;
this.networkIO = networkIO;
}

public static AppExecutor getInstance() {
if (sInstance == null) {
synchronized (LOCK) {
sInstance = new AppExecutor(Executors.newSingleThreadExecutor(),
Executors.newFixedThreadPool(3), new MainThreadExecutor());
}
}
return sInstance;
}

public Executor diskIO() {
return diskIO;
}

public Executor mainThread() {
return mainThread;
}

public Executor networkIO() {
return networkIO;
}

private static class MainThreadExecutor implements Executor {
private android.os.Handler mainThreadHandler =
new android.os.Handler(Looper.getMainLooper());

@Override
public void execute(@NonNull Runnable runnable) {
}
}
}

现在创建这个新类后,在应用程序线程中执行所有数据库访问功能。这比使用异步任务和内置 Java 线程库要好。还要确保任何数据访问函数都不在 UI 线程上运行。如果您发布了更多代码,我将能够查明确切的问题。最后一件事在你的代码中使用它如下 -

AppExecutor.getInstance().diskIO().execute(new Runnable() {
@Override
public void run() {
///Your data access task////
}
});

关于android - 房间运行很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51115109/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com