问题描述
我有使用BufferedReader和realm.io读取文本行的代码
realm.beginTransaction();
BufferedReader reader;
while ((strLineText = reader.readLine()) != null) {
lineNumber++;
LineData managedLineData = realm.copyToRealm(lineData);
contentDataRealm.chatDataList.add(managedLineData);
tvProgress.setText(getString(R.string.text_progress,lineNumber * 100 / totalLine));
pbProgress.setProgress(lineNumber * maxProgress / totalLine);
}
进度栏仍为0,文本视图未更新。我尝试使用ui线程,但仍然遇到相同的问题。
realm.beginTransaction();
while ((strLineText = reader.readLine()) != null) {
runOnUiThread(new Runnable() {
@Override
public void run() {
lineNumber++;
LineData managedLineData = realm.copyToRealm(lineData);
contentDataRealm.chatDataList.add(managedLineData);
tvProgress.setText(getString(R.string.text_progress,lineNumber * 100 / contentSize));
pbProgress.setProgress(lineNumber * maxProgress / contentSize);
}
});
}
与此同时
realm.beginTransaction();
while ((strLineText = reader.readLine()) != null) {
tvProgress.post(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
lineNumber++;
LineData managedLineData = realm.copyToRealm(lineData);
contentDataRealm.chatDataList.add(managedLineData);
tvProgress.setText(getString(R.string.text_progress,lineNumber * 100 / contentSize));
pbProgress.setProgress(lineNumber * maxProgress / contentSize);
}
});
}
});
}
然后,我决定使用不确定对象,并确定我的加载动画已停止。我尝试使用后延迟,仅在阅读开始之前加载动画工作
handler.postDelayed(new Runnable() {
@Override
public void run() {
readContent(); // reading text from BufferedReader
}
},1000);
我错过了什么吗?
解决方法
尝试将工作流程分为两部分:
-
读取数据库->创建文本对象(使用StringBuilder或StringBuffer,尝试做出正确选择)。这部分应该在后台任务中工作。
-
更新用户界面。这部分应该在主线程上运行。
重要说明:请不要忘记活动/片段的生命周期。