我在firebase数据库中有1700个帖子,但是当我使用firebase连接时,屏幕被冻结30秒到一分钟,并提取了数据
注意:如果帖子很少,则屏幕不会冻结
代码
ViewModel
是否有摆脱它的方法?
答案 0 :(得分:4)
尽管例如在后台线程上监听事件更改,例如addChildEventListener()
,但是在该线程上启动进程时,onChildAdded()
内部发生的任何事情都在主UI线程上。为了提高大数据的性能,请将解析或文件操作移至后台线程。
要执行繁重的工作,可以使用AsyncTask
(这对于初学者和新手来说都很好)。我通常发现,轻松剥离自己的新线程来处理这种事情比较容易。
答案 1 :(得分:1)
您想使用AsyncTask
或Runnable
在后台执行繁重的任务
示例:
new Thread(new Runnable() {
@Override
public void run() {
// your work here
}
}).start();
答案 2 :(得分:1)
在Java中:
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
在Java中就是这样。
,您可以查看此官方文档:
https://developer.android.com/reference/android/os/AsyncTask