我的活動崩潰與OutOfMemoryError,但我找不到方法來捕獲它?Android EditText.setText字符串非常大時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的似乎顯示活動失敗,因爲它的繪圖佈局?
字符串變量「content」在調用活動「Main」中,當內容很小時,我不會收到任何錯誤,當使用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)
你覺得我還沒試過谷歌?前20項結果不涉及編輯文本或如何捕捉活動時的陷阱! – Mark 2014-09-13 15:22:59
Android UI運行事件循環。您的try-catch失敗,因爲實際異常發生在事件循環的後續迭代中。我可以從堆棧跟蹤中看出它在測量視圖期間發生。你可以創建EditText的子類,並在你的子類中覆蓋'onMeasure(...)'方法。將try-catch放在'super.onMeasure(...)'調用中。 – Barend 2014-09-13 15:25:29
在EditText中顯示多個字符的目的是什麼? – Tom 2014-09-13 15:34:03