2016-06-25 2 views
0

Je reçois une erreur lorsque j'utilise StaticLayout pour créer une pagination de texte volumineux (~ 6mb). Ceci est mon journal:StaticLayout OutOfMemoryError avec un texte volumineux

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) 

Y at-il suggéré pour corriger cette erreur? Ou y a-t-il une solution alternative?

Répondre

0

Vous devez réécrire ou étendre la classe de pagination. Vous ne devriez pas mettre tout le texte dans StaticLayout à la fois. Au lieu de cela, vous devez diviser le texte en parties. Les pièces ne doivent pas être trop lage. Je suppose que 10k-100k ira bien. prenez la première partie, divisez-la en pages, comptez les pages, multipliez-la par le nombre de parties - ce sera la quantité approximative de pages dans votre livre. Lorsqu'un utilisateur souhaite voir la page passée d'une première partie, vous devez commencer la deuxième partie juste au début de la dernière page de la première partie. Etc. Ne chargez pas tout le texte dans StaticLayout - c'est trop.

+0

Oh merci, je vais essayer d'étendre la classe de pagination. –

+0

Désolé j'utilise la sous-chaîne pour le texte divisé en parties mais je suis très lent avec le texte ~ 6mb. Avez-vous une solution suggérer pour moi? –