我首先要说的是我对android很新,而且对java也是新手,所以我为丢失任何对其他人来说显而易见的事情而道歉。
下面显示的代码应该从assets文件夹中的文件中读取一行,只要下一行不为空,将该行的内容分配给变量('stringBuffer'{{1然后将此变量添加到String
。
ArrayList
我正在手机上运行应用程序,当应该进行此过程时,应用程序将变为黑色,LogCat显示“GC_FOR_ALLOC已释放”,后跟不同的数字。
我尝试评论String stringBuffer = "";
BufferedReader reader = null;
ArrayList<String> fileLines = new ArrayList<>();
input = mContext.getAssets().open("Nodes.txt");
reader = new BufferedReader(new InputStreamReader(input));
while((stringBuffer = reader.readLine()) != null) {
fileLines.add(stringBuffer);
}
reader.close();`
行并且程序再次运行,这就是为什么我假设出现问题的原因是由于这一行。
我想知道这个fileLines.add(stringBuffer);
意味着什么,以及它为什么会发生。如果需要任何其他信息,请随时询问。
编辑:这是一个非活动类是重要的。
答案 0 :(得分:1)
尝试使用此代替代码中的内容:
ArrayList <String> fileLines = new ArrayList<String>();
答案 1 :(得分:0)
GC_FOR_ALLOC
表示已触发垃圾收集,因为堆上没有足够的空间来创建新对象。这可以在创建新对象时触发。看起来你正在创建很多本地对象(?)。试着减少那些,也许吧。
来源:What do GC_FOR_MALLOC, GC_EXPLICIT, and other GC_* mean in Android Logcat?
答案 2 :(得分:0)
你可以尝试这个 - 提供缓冲区大小也许可以解决问题,对我来说工作正常。
AssetManager am = getAssets();
InputStream is = am.open("tables.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);