2013-03-13 2 views
0

Как самообучающийся кодер У меня есть вопрос о лучшей практике кодирования. Я написал одну и ту же программу двумя разными способами, и я хотел бы, чтобы кто-то дал мне руководство, каким образом это предпочтение? Это может быть связано с нагрузкой на ЦП или использованием ОЗУ или просто с точки зрения наилучшей практики кодирования. Я понимаю, что на этот вопрос может быть много ответов или теорий, и я знаю, что это не то, что для Stack Overflow здесь, но для меня это вопрос переполнения стека, поскольку мой стиль кодирования вызывает у меня некоторые проблемы, и я не знаете, какой метод я должен придерживаться или придерживаться.Java/Android, какой метод кодирования является предпочтительным?

Оба примера имеют простой файл макета XML с двумя кнопками и двумя обновляемыми текстовыми изображениями (не включены здесь).

Пример 1. (как я, как правило, код на данный момент)

public class MainActivity extends Activity { 

    Button button1Add, button2Add; 
    TextView text1Display, text2Display; 
    int count1, count2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     initilizeButtons(); 
     setupListeners(); 
    } 

    public void initilizeButtons() { 
     button1Add = (Button) findViewById(R.id.button1); 
     button2Add = (Button) findViewById(R.id.button2); 
     text1Display = (TextView) findViewById(R.id.textView1); 
     text2Display = (TextView) findViewById(R.id.textView2); 
     count1 = Integer.parseInt(text1Display.getText().toString()); 
     count2 = Integer.parseInt(text2Display.getText().toString()); 
    } 

    public void setupListeners() { 
     button1Add.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       count1++; 
       text1Display.setText(String.valueOf(count1)); 
      } 
     }); 

     button2Add.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       count2++; 
       text2Display.setText(String.valueOf(count2)); 
      } 
     }); 
    } 

} 

Пример 2. (так, как я думаю, что должен быть кодирование?)

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     initilizeButtons(); 

    } 

    public void initilizeButtons() { 
     Button button1Add = (Button) findViewById(R.id.button1); 
     Button button2Add = (Button) findViewById(R.id.button2); 

     button1Add.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       TextView text1Display = (TextView) findViewById(R.id.textView1); 
       int headCount = Integer.parseInt(text1Display.getText().toString()); 
       headCount++; 
       text1Display.setText(String.valueOf(headCount)); 
      } 

     }); 

     button2Add.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       TextView text2Display = (TextView) findViewById(R.id.textView2); 
       int bodyCount = Integer.parseInt(text2Display.getText().toString()); 
       bodyCount++; 
       text2Display.setText(String.valueOf(bodyCount)); 
      } 

     }); 
    } 

} 

В примере 1 I предположим, что это будет быстрее (т. е. меньше CPU), поскольку я объявил свои переменные и просто добавляю к ним всю программу. Я беспокоюсь об использовании ОЗУ.

В примере 2 Я думаю, что это приведет к большему количеству использования ЦП, поскольку оно должно обновлять все переменные каждый раз, когда они используются, но, возможно, он использует меньше ОЗУ?

Это просто примеры, и я уверен, что они сами не будут сильно зависеть от накладных расходов CPU или RAM. Я буду применять информацию из ответа, который вы предоставляете моей общей практике кодирования.

+0

У вас проблема с производительностью/памятью? Если нет, то помните: «преждевременная оптимизация - это корень всего зла ...» Кстати, в наши дни ссылка не считается стоимостью памяти. Слишком много ссылок (и не поддерживающих их должным образом), с другой стороны, может привести к утечке памяти ... – ppeterka

+4

Возможно, вы захотите переписать на codereview.stackexchange.com. Это те вопросы, на которые они сосредоточены. – Perception

+0

Что вы хотите знать с вашим вопросом. сначала уточните свой вопрос, чтобы другие могли ответить вам лучше всего. –

ответ

1

я думаю, пример 1 должен быть предпочтительным способом.

Использование Ram не сильно увеличивается, поскольку виджеты существуют, если вы используете findViewById или нет. Вы получаете только ссылку на показанные объекты.

Лично я использую AndroidAnnotations, это позволяет отбросить initilizeButtons(), так как вы можете добавить некоторые аннотации к полям, а библиотека вводит их для вас. Посмотрите на их сравнение с кодами на своем веб-сайте ... это потрясающе. И он также поддерживает многие другие приятные функции. И лучшая часть заключается в том, что она использует генерацию кода и не использует отражение во время выполнения (что стоит процессор и производительность), как и другие аналогичные библиотеки ...

+0

Также спасибо за ссылку, выглядит как хорошая библиотека. – Purplemonkey

0

Это зависит от ваших потребностей,

в примере, если ваша активность использовать много раз с этим Views, вариант 2 лучше

0

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

Рассмотрите это; (извините, если есть опечатки, сделал это в блокноте). Я не фокусировался на остальной части кода, например, называя метод initilizeButtons, который является неправильной орфографией, а также вводит в заблуждение, поскольку вы не только инициализируете кнопки, но также текстовые и целые числа.

public class MainActivity extends Activity implements OnClickListener { 

    Button button1Add, button2Add; 
    TextView text1Display, text2Display; 
    int count1, count2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     initilizeButtons(); 
     setupListeners(); 
    } 

    public void initilizeButtons() { 
     button1Add = (Button) findViewById(R.id.button1); 
     button2Add = (Button) findViewById(R.id.button2); 
     text1Display = (TextView) findViewById(R.id.textView1); 
     text2Display = (TextView) findViewById(R.id.textView2); 
     count1 = Integer.parseInt(text1Display.getText().toString()); 
     count2 = Integer.parseInt(text2Display.getText().toString()); 
    } 

    public void setupListeners() { 
     button1Add.setOnClickListener(this); 
     button2Add.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 
     switch(view.getId()){  
     case R.id.button1: 
      // Do your button1 things 
     break; 
     case R.id.button2: 
      // do your button2 things 
     break; 
     } 
    } 

} 
0

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

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

Смежные вопросы