我的活动因OutOfMemoryError崩溃,但我找不到陷阱的方法?
这是一个将字符串变量添加到edittext的简单活动。
try {
counter_pat_text.setText(Main.content);
}catch(OutOfMemoryError e){
Toast.makeText(Edittext.this, "Text file to large!", Toast.LENGTH_LONG).show();
}
正如您所看到的,我在设置edittext文本时尝试捕获错误但是logcat似乎显示活动失败,因为它正在绘制布局?
字符串变量"内容"是在主叫"主要"当内容很小时,我没有错误,当使用edittext打开第二个活动时,活动和edittext工作。
因为当内容变量非常大(932974个字符)时我无法加载活动,如何捕获OutOfMemoryError?或者我如何计算内容变量中的字符数将导致活动崩溃,以便我可以在调用活动中截断它?
09-13 15:56:22.340: E/AndroidRuntime(20341): FATAL EXCEPTION: main
09-13 15:56:22.340: E/AndroidRuntime(20341): java.lang.OutOfMemoryError: (Heap Size=26695KB, Allocated=15242KB, Bitmap Size=308KB)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.text.StaticLayout.out(StaticLayout.java:994)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.text.StaticLayout.generate(StaticLayout.java:531)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.text.DynamicLayout.reflow(DynamicLayout.java:261)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.text.DynamicLayout.<init>(DynamicLayout.java:150)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.widget.TextView.makeNewLayout(TextView.java:5266)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.widget.TextView.onMeasure(TextView.java:5601)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.view.View.measure(View.java:8553)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1082)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.widget.ScrollView.onMeasure(ScrollView.java:296)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.view.View.measure(View.java:8553)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.widget.HorizontalScrollView.measureChildWithMargins(HorizontalScrollView.java:1083)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.widget.HorizontalScrollView.onMeasure(HorizontalScrollView.java:302)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.view.View.measure(View.java:8553)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3261)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.view.View.measure(View.java:8553)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.widget.LinearLayout.measureVertical(LinearLayout.java:531)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.view.View.measure(View.java:8553)
09-13 15:56:22.340: E/AndroidRuntime(20341): at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:873)
答案 0 :(得分:1)
虽然您可以编写尝试捕获错误的代码,但绝对无法保证它能够正常工作。 Error类的Javadoc说:
错误是Throwable的子类,表示严重问题 合理的申请不应该试图抓住。
当DVM抛出错误时,它处于严重的麻烦状态,可能处于不可恢复的状态。虽然您可以编写看起来可以捕获错误的代码:
try {
//...
} catch (Throwable t) {
// ..
}
......在风中几乎是吹口哨。 JVM已经尽力告诉你现在为时已晚。
......来吧! 932974个字符???那是1M!