Как повысить производительность следующего кода?

У меня есть следующий код, который отображает изображение с буквами,

public class MainActivity extends Activity 
{
    private String[] capital_letters,small_letters;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onStart()
    {
        super.onStart();

        try
        {
            capital_letters = getApplicationContext().getResources().getStringArray( R.array.capital_letters );
            small_letters = getApplicationContext().getResources().getStringArray( R.array.small_letters );

            MyAdapter adapter = new MyAdapter ( MainActivity.this ,capital_letters,small_letters );
            ListView list = ( ListView ) findViewById( R.id.list );
            list.setAdapter( adapter );

            list.setOnItemClickListener( new AdapterView.OnItemClickListener() 
            {
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int position,long id ) 
                {
                    Intent intent = new Intent ( MainActivity.this, LetterActivity.class );
                    intent.putExtra( "position", position );
                    intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                    startActivity(intent);
                    overridePendingTransition( 0, 0 );
                }
            });
        }
        catch ( Exception e ){e.printStackTrace();}
    }
}

Как я могу сделать свой код таким легким, что он работает очень плавно. Плавное значение производительности, правильное объявление переменных, циклов, использование коллекции мусора и т.д.

Ответ 2

Вы не одиноки в том, чтобы думать о производительности, необходимой для правильного объявления переменных, оптимизации циклов и т.д.

Но если вы просто сядете и сделаете это, вы в конечном итоге зафиксируете вещи, которые не сломаны.

Ключом к настройке производительности является следующее: сначала узнать, что нужно исправить.

То, что профилировщики должны вам помочь. Лично я использую случайную приостановку, и так много людей. Здесь короткое слайд-шоу PDF об этом.

Сделка заключается в том, что если ваш код действительно прост (в этом случае у него может не быть места для ускорения), возможно, у него есть несколько вещей, которые вы можете исправить, чтобы ускорить его. Предположим, что существует три:

  • A, ответственный за 40% от общего времени
  • B, ответственный за 20% от общего времени
  • C, ответственный за 10% от общего времени

ОК, так что сначала вы найдете A, и вы его исправите. Сколько у вас ускорений? (1/(1-.4)) = 1,67 или 67%. Неплохо.

Но если вы посмотрите снова на проценты, теперь:

  • B занимает 33% (потому что он занимает столько же времени, сколько и раньше, но сумма больше не надувается A)
  • C принимает 17%

Поэтому их должно быть легче найти, так как они занимают более крупные проценты. Вы получаете идею.

Если вы исправите все из них, сколько у вас ускорений? 1/(1 -.7)) = 3.33 = 233%.

Если бы было больше, например D и E, что могло бы быть очень хорошо, вы могли бы пойти еще дальше.

Но если вы пропустите ни одного из них, сколько у вас ускорений? Этот предмет становится вашим ограничителем скорости. Поэтому продолжайте идти, пока вы больше не найдете ничего.

Идите к нему и получайте удовольствие!

Ответ 3

Это зависит от вашего конкретного приложения, чтобы дать общий ответ. Но Google написал руководство по эффективности с советами для Android. Я бы предложил прочитать это.

Конечно, это не идет в общие рекомендации по производительности, но я ожидаю, что вы уже знаете их. Если нет, попробуйте найти некоторые ресурсы для общей настройки производительности программ и рекомендаций по производительности, характерных для Java, хотя не все последние будут применимы для Android.

Не считайте, что, хотя многие из этих советов (очень немного) улучшают производительность, они не всегда могут быть лучшими решениями с точки зрения программного обеспечения (например, с точки зрения обслуживания и переносимости). Также многие из них - просто "трюки", которые могут быть автоматизированы компилятором и, вероятно, будут включены в более позднюю версию JIT. Они могут даже быть в 4.0, поскольку руководство было написано для 2.3.