Как я могу увеличить производительность следующего кода? - PullRequest
7 голосов
/ 23 января 2012

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

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();}
    }
}

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

Ответы [ 3 ]

5 голосов
/ 23 января 2012

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

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

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

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

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

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

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

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

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

Так что их легче найти, так как они берут больший процент.Вы поняли.

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

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

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

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

2 голосов
/ 23 января 2012

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

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

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

1 голос
/ 23 января 2012

Посмотрите на этот вопрос и все его ответы , которые много говорят об оптимизации производительности на Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...