2016-06-25 7 views
0

大きなテキスト(〜6MB)のページネーションを作成するためにStaticLayoutを使用するとエラーが発生します。 これは私のログです:StaticLayout大文字のOutOfMemoryError

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) 

は、このエラーを修正するための任意の提案はありますか?または、代替ソリューションがありますか?

答えて

0

ページネーションクラスを書き直したり拡張したりする必要があります。 すべてのテキストを同時にStaticLayoutに配置しないでください。 代わりに、テキストを部分に分割する必要があります。パーツはあまりにも大きくないはずです。 私は10k-100kが大丈夫だろうと思います。 最初の部分を取って、それをページに数え、ページを数え、それを部品の量で掛けます。これはあなたの本のページのおおよその量になります。 ユーザーが最初の部分の過去のページを見たい場合は、最初の部分の最後のページが始まるところで2番目の部分を開始する必要があります。等々。 StaticLayoutにすべてのテキストを読み込まないでください。大きすぎます。

+0

ありがとう、私はページネーションクラスを拡張しようとします。 –

+0

申し訳ありませんが、分割テキストを部分文字列にするために部分文字列を使用していますが、6mbのテキストでは非常に遅いです。私のために提案する解決策はありますか? –

関連する問題