2016-06-25 12 views
0

Ich erhalte einen Fehler, wenn ich StaticLayout für die Erstellung von Paginierung von großem Text verwende (~ 6 MB). Das ist mein log:StaticLayout OutOfMemoryError mit großem Text

java.lang.OutOfMemoryError 
at android.text.MeasuredText.addStyleRun(MeasuredText.java:193) 
at android.text.MeasuredText.addStyleRun(MeasuredText.java:269) 
at android.text.StaticLayout.generate(StaticLayout.java:291) 
at android.text.StaticLayout.<init>(StaticLayout.java:143) 
at android.text.StaticLayout.<init>(StaticLayout.java:93) 
at android.text.StaticLayout.<init>(StaticLayout.java:71) 
at android.text.StaticLayout.<init>(StaticLayout.java:51) 
at com.ex.test.pagenation.Pagination.layout(Pagination.java:38) 
at com.ex.test.pagenation.Pagination.<init>(Pagination.java:34) 
at com.ex.test.pagenation.MainActivity$1.onGlobalLayout(MainActivity.java:51) 
at android.view.ViewTreeObserver.dispatchOnGlobalLayout(ViewTreeObserver.java:847) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2006) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1200) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6401) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:803) 
at android.view.Choreographer.doCallbacks(Choreographer.java:603) 
at android.view.Choreographer.doFrame(Choreographer.java:573) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:789) 
at android.os.Handler.handleCallback(Handler.java:733) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:157) 
at android.app.ActivityThread.main(ActivityThread.java:5335) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
at dalvik.system.NativeStart.main(Native Method) 

Gibt es einen Vorschlag für Fix diese Fehler? Oder gibt es eine alternative Lösung?

Antwort

0

Sie sollten die Paginierungsklasse umschreiben oder erweitern. Sie sollten den gesamten Text nicht gleichzeitig in StaticLayout einfügen. Stattdessen sollten Sie Text in Teile teilen. Teile sollten nicht zu viel sein. Ich denke, 10k-100k wird in Ordnung sein. nehmen Sie den ersten Teil, teilen Sie ihn in Seiten, zählen Sie die Seiten, multiplizieren Sie ihn mit der Anzahl der Teile - das ist die ungefähre Anzahl der Seiten in Ihrem Buch. Wenn ein Benutzer die vorherige Seite eines ersten Teils sehen möchte, sollten Sie den zweiten Teil genau dort beginnen, wo die letzte Seite des ersten Teils beginnt. Und so weiter. Laden Sie nicht den gesamten Text in StaticLayout - es ist zu viel.

+0

Oh danke, ich werde versuchen, Paginierung Klasse erweitern. –

+0

Sorry, ich benutze Teilzeichenfolge für Split-Text in Teile, aber ich bin sehr langsam mit ~ 6 MB Text. Hast du irgendeine Lösung für mich vorgeschlagen? –

Verwandte Themen