【发布时间】:2018-01-01 05:07:55
【问题描述】:
我的应用程序实现了一个 ChildEventListener 来将数据加载到一个 ArrayList(大约 7000 个项目)中。 在对每个项目执行 childAdded 期间,界面完全冻结,无法使用。 有什么方法可以在后台运行它并且不会影响可用性? 我已经尝试过使用 AsyncTask 和 Thread 但应用程序仍然冻结。提前致谢。
类 FBTask 扩展 AsyncTas {
@Override
protected Boolean doInBackground(final Boolean... params){
int size = 7000; //aprox,
final ArrayList<Model> aux = new ArrayList<>();
Query db = FirebaseDatabase.getInstance().getReference()
.child("List").orderByChild("Double");
ChildEventListener cEL = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Model x = dataSnapshot.getValue(Model.class);
if(x.getT()!=null) {
aux.add(x)
Log.i("onChildAdded", x.getId() + " Added, pos: " + dX.size());
if(aux.size()>=size) {
data = aux;
}
}
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
db.addChildEventListener(cEL);
}
@Override
protected void onProgressUpdate(Boolean... values) {
}
@Override
protected void onPreExecute() {
}
@Override
protected void onPostExecute(DownAdapter result) {
if(result != null) {
DownActivity.downRecView.setAdapter(result);
}
}
@Override
protected void onCancelled() {
}
}
【问题讨论】:
标签: android firebase firebase-realtime-database