我在LogCat中收到OutOfMemoryError消息,我的应用程序崩溃,因为错误未被捕获.
导致OutOfMemoryError的两件事:
1.将大文本文件读入字符串.
2.将该字符串发送到我的TextView.
简单地为这两件事添加一个catch不仅可以捕获OutOfMemoryError,而且可以完全解决内存不足的问题.
LogCat中没有更多崩溃,也没有更多错误消息.该应用程序运行完美.
这怎么可能?究竟发生了什么?
使用此代码,我收到错误消息和应用程序崩溃:
try
{
myString = new Scanner(new File(myFilePath)).useDelimiter("\\A").next();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
myTextView.setText(myString);
Run Code Online (Sandbox Code Playgroud)
只是通过"捕获" OutOfMemoryError,LogCat中没有更多的错误消息而且没有崩溃:
try
{
myString = new Scanner(new File(myFilePath)).useDelimiter("\\A").next();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch(OutOfMemoryError e)
{
}
try
{
myTextView.setText(myString);
}
catch(OutOfMemoryError e)
{
}
Run Code Online (Sandbox Code Playgroud) 我在下面发布了两个例子.
在第一个例子中,我使用等于运算符,而while进程永远持续,而不是在它应该的时候断开.
在第二个例子中,我使用了大于或等于运算符,并且进程在应该的时候中断.
这怎么可能呢?
例1:
Integer myVar1 = 42985;
Integer myVar2 = 1;
while (true)
{
if (myVar2 == myVar1)
{
break;
}
++ myVar2;
}
Run Code Online (Sandbox Code Playgroud)
例2:
Integer myVar1 = 42985;
Integer myVar2 = 1;
while (true)
{
if (myVar2 >= myVar1)
{
break;
}
++ myVar2;
}
Run Code Online (Sandbox Code Playgroud)
编辑:谢谢大家的好答案!我现在完全理解这个问题,这个新信息解释了我在我的应用程序中遇到的一些奇怪的行为.我希望我能选择一个以上的最佳答案.