如何获取过多数据时摆脱冻结屏幕

时间:2018-11-21 14:43:19

标签: android firebase firebase-realtime-database

我在firebase数据库中有1700个帖子,但是当我使用firebase连接时,屏幕被冻结30秒到一分钟,并提取了数据

注意:如果帖子很少,则屏幕不会冻结

代码

ViewModel

是否有摆脱它的方法?

3 个答案:

答案 0 :(得分:4)

尽管例如在后台线程上监听事件更改,例如addChildEventListener(),但是在该线程上启动进程时,onChildAdded()内部发生的任何事情都在主UI线程上。为了提高大数据的性能,请将解析或文件操作移至后台线程。

要执行繁重的工作,可以使用AsyncTask(这对于初学者和新手来说都很好)。我通常发现,轻松剥离自己的新线程来处理这种事情比较容易。

答案 1 :(得分:1)

您想使用AsyncTaskRunnable在后​​台执行繁重的任务

示例:

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