我正在创建一个应用程序,涉及从Assets文件夹中的文本文件中读取数据。对于每个文件,它将数据存储在单独的ArrayList
中。这些文件在活动的onCreate()方法中一个接一个地读取。所有文本文件总共1.8 MB,在模拟器上,当前需要12秒才能加载活动。该应用程序不会在模拟器上崩溃(它只需要大约12秒)。
我已经阅读过关于异步线程的内容,但我过去从未需要过它们。我正计划使用某种消息或进度条来通知用户该活动实际上正在加载并且没有崩溃。
所以我的问题是:即使应用程序在加载活动时没有崩溃,我是否还应该在异步或不同的线程上读取文件?如果是这样,我将如何正确地做到这一点? (我以前从未这样做过。)
以下是阅读文本文件的示例代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_name);
populateArrayLists();
}
public void populateArrayLists() {
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(getAssets().open(
"text1.txt")));
String text;
while ((word = br.readLine()) != null) {
ArrayList1.add(text);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close(); // stop reading
} catch (IOException ex) {
ex.printStackTrace();
}
}
br = null;
try {
br = new BufferedReader(new InputStreamReader(getAssets().open(
"text2.txt")));
// the same process is duplicated for 1-15
// it may not be the best or most efficient way but it works
任何帮助都将不胜感激。
答案 0 :(得分:0)
是的,你需要一个后台线程。 Loader api可能是您最简单的选择。
这将允许您至少显示通知并在文件加载时提供一些内容。甚至可以加载它们并逐步显示数据,如果这就是你正在做的事情。
修改:加载程序是compatibility library中提供的3.0功能。如果您不愿意添加相关性,则可以随时回溯到AsyncTask,在这种情况下,您可以查看this。