2016-08-26 15 views
-1

50個以上のボタンがある画面を設計する必要があります。ボタンをプログラムで作成することはできず、ボタンのサイズと位置が規則的ではないため、手動でXMLレイアウトに配置する必要があります。 しかし、私は50以上のボタンでXMLレイアウトを設計し、アクティビティでそれをうまく膨らませることができました。Android - 多くのビューを生成するときにアプリケーションがメインスレッドであまりにも多くの作業をしている可能性があります

プロジェクトをビルドすると、スムーズに動作するように見えますが、ログに表示されます。

I/Choreographer: Skipped 56 frames! The application may be doing too much work on its main thread.

この問題が発生していないレイアウトを構築する良いアイデアはありますか?

明確にするために、UIの外観を示すスクリーンショットを添付しました。 ご覧のとおり、クリック可能なすべての葉が必要です。色を変更する必要があります。 enter image description here

このアクティビティをアプリで再読み込みするとクラッシュすることがあります。 ここにクラッシュログがあります。

FATAL EXCEPTION: main Process: com.au.therefreshproject.refreshandgogreen, PID: 14151 java.lang.OutOfMemoryError: Failed to allocate a 301476 byte allocation with 77600 free bytes and 75KB until OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method) at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444) at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1080) at android.content.res.Resources.loadDrawableForCookie(Resources.java:2635) at android.content.res.Resources.loadDrawable(Resources.java:2540) at android.content.res.TypedArray.getDrawable(TypedArray.java:870) at android.graphics.drawable.StateListDrawable.inflateChildElements(StateListDrawable.java:170) at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:115) at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1215) at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1124) at android.content.res.Resources.loadDrawableForCookie(Resources.java:2630) at android.content.res.Resources.loadDrawable(Resources.java:2540) at android.content.res.TypedArray.getDrawable(TypedArray.java:870) at android.view.View.(View.java:3948) at android.widget.TextView.(TextView.java:677) at android.widget.Button.(Button.java:109) at android.widget.Button.(Button.java:105) at android.support.v7.widget.AppCompatButton.(AppCompatButton.java:62) at android.support.v7.widget.AppCompatButton.(AppCompatButton.java:58) at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:109) at android.support.v7.app.AppCompatDelegateImplV7.createView(AppCompatDelegateImplV7.java:1008) at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:1067) at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44) at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:189) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:746) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) at android.view.LayoutInflater.rInflate(LayoutInflater.java:835) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) at android.view.LayoutInflater.rInflate(LayoutInflater.java:838) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) at android.view.LayoutInflater.rInflate(LayoutInflater.java:838) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) at android.view.LayoutInflater.rInflate(LayoutInflater.java:838) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) at android.view.LayoutInflater.rInflate(LayoutInflater.java:838) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) at android.view.LayoutInflater.inflate(LayoutInflater.java:515) at android.view.LayoutInflater.inflate(LayoutInflater.java:423)

XMLレイアウトの一部がここにあります。あなたはビットマップで作業しているとき

<RelativeLayout 
       android:layout_width="320dp" 
       android:layout_height="400dp" 
       android:layout_centerHorizontal="true" 
       android:layout_alignParentBottom="true"> 
       <ImageView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:background="@drawable/tree_01" 
        android:layout_alignParentBottom="true"/> 
       <Button 
        android:id="@+id/treenBtn0" 
        android:layout_width="19dp" 
        android:layout_height="31dp" 
        android:layout_marginLeft="31dp" 
        android:layout_marginTop="90dp" 
        android:tag="28" 
        android:background="@drawable/tree_02"/> 
       <Button 
        android:id="@+id/treenBtn1" 
        android:layout_width="27dp" 
        android:layout_height="22dp" 
        android:layout_marginLeft="10dp" 
        android:layout_marginTop="122dp" 
        android:tag="29" 
        android:background="@drawable/tree_03"/> 

と描画可能リソースが

drawable/tree_02.xml 
<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:drawable="@drawable/tree_02_on"/> 
    <item android:drawable="@drawable/tree_02_off"/> 
</selector> 
drawable/tree_03.xml 
<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:drawable="@drawable/tree_03_on"/> 
    <item android:drawable="@drawable/tree_03_off"/> 
</selector> 
+0

を拭いてください。あなたはスケッチやUIの見た目のスクリーンショットを共有できますか? – JoelFernandes

+0

確かに、私はすぐにスクリーンショットを添付します。 – star99

+0

最良の方法は、ビュータイプでRecyclerビューを使用することです。 50のうち、少なくとも一部には同じタイプのレイアウトがあります。条件に応じて、ビュータイプを変更することができます。 –

答えて

-1

のOutOfMemoryErrorでは共通の問題です。マニフェストファイルでlargeHeapを有効にしてみてください。マニフェストファイル内のアプリケーションタグ内にandroid:largeHeap="true"を使用してください。 thisの解決策を確認してください。

+0

すでにmanifestファイルでlargeHeapをtrueに設定しました。 – star99

+0

@ star99 xmlファイルとマニフェストとbuild.gradleを追加して、すでに行ったことの解消を避ける方が簡単かもしれません – Zoe

+0

割り当てられたメモリをonDestroy()メソッドでビットマップとビューで解放してみてください。 –

0

コードが不足しているため、コードでも答えられません。そこで、クラッシュを防止するためのヒントをいくつか紹介します。あなたはもはやあなたはアプリを再起動するときに問題が発生したと述べた

を必要とする活動に

  • コールfinish。私はまた、 "Appスキップ[x]フレームを取得しました!アプリケーションが主なスレッドであまりにも多くの作業をしている可能性があります。システムがあなたの活動をシャットダウンすることを忘れないでくださいpropperly
  • を制御する必要はありません動作を制御するためのスレッドを追加する

    • 。バックグラウンドで実行する必要のないアクションを停止します。多分それは不可能活動
    • に再起動するようにするすべての配列リスト、リスト、[]の配列と明らかにして先に行くための最善のアプローチではありませんあまりにも多くのメモリをとることができ、すべてのもの
関連する問題

 関連する問題