2016-08-31 6 views
0

button.setBackgroundResource行を削除すると、私の問題を解決しているように見えます。私が見つけた私は15のボタンに背景を設定しようとしていますが、私はフレームの問題をスキップしています。どこかでスレッドを使うべきですか? (私はAndroidを初めて使用しています)

private void feedButtonWithRandomImages(){ 

    arrayOfImageCount = arrayOfImagesId.length; 
    //type fori for autocomplete for loop 
    for (i = 0; i < arrayOfImageCount;) { 
       randomIndex = random.nextInt(arrayOfImageCount); 
       if (!randomIndexList.contains(randomIndex)) { 
        randomIndexList.add(randomIndex); 
        int id = getResources().getIdentifier("btnSeekAndFind" + i, "id", getPackageName()); 
        button = (Button) findViewById(id); 
        button.setBackgroundResource(arrayOfImagesId[randomIndex]); 
        button.setTag(thingsToFind[randomIndex]); 
        i++; 
        button.setOnTouchListener(new View.OnTouchListener() { 
         @Override 
         public boolean onTouch(View v, MotionEvent event) { 
          String backgroundId = v.getTag().toString(); 
          v.getBackground(); 
          int newBackgroundId = findPressedImage(backgroundId); 


          if (event.getAction() == MotionEvent.ACTION_DOWN) { 
           blopsound.start(); 
           v.setBackgroundResource(arrayOfImagesIdPressed[newBackgroundId]); 
          } else if (event.getAction() == MotionEvent.ACTION_UP) { 
           if (!isGoodAnswer(backgroundId)) { 
            v.setBackgroundResource(arrayOfImagesId[newBackgroundId]); 
           } else { 
            v.setEnabled(false); 
            getRandomWord(); 
            onSpeech(0); 
           } 
          } 
          return true; 
         } 
        }); 
       } 

      } 
    }`. 
+0

あなたのインデックスはランダムであるため、繰り返すことがあります。だから、あなたは15回以上の反復をして、その上にもっと時間を費やすことになるかもしれません。 –

答えて

0

ほとんどのパフォーマンスの問題:

  1. は、リストの代わりに設定して使用してみてください、それが自動的に重複を排除し、いくつかのメソッド呼び出しを保存してしまいます。
  2. ボタンの数が固定されている場合は、ループ外のレイアウトからボタンの数を抽出してください(ライフサイクルのコールバックが異なる可能性があります)。 findViewById()はいくつかで高価と考えられています...
  3. すべてのループサイクルで新しいOnTouchListenerをインスタンス化する必要はありません。単一のリスナーとタグを使用して、異なる項目を区別することができます。

さらに、profiling toolsを使用して、メソッド呼び出しの回数と期間を測定してみます。

+0

あなたの良い説明をありがとう!私は今これを試してみるつもりです。 – Marc

+0

プロファイリングツールは私を大いに助け、またOnTouchListenerを削除することは助けになったようです。ありがとう。 – Marc

関連する問題