0

作为一名自学成才的编码员,我有一个关于编码最佳实践的问题。我用两种不同的方式编写了同一个程序,我希望有人指导我选择哪种方式?这可能来自 CPU 开销或 RAM 使用情况,或者仅仅是编码最佳实践的角度。我很欣赏这个问题可能有很多答案或理论,我知道这不是 Stack Overflow 的目的,但对我来说这是一个 Stack Overflow 问题,因为我的编码风格给我带来了一些问题,而我没有知道我应该坚持还是采用哪种方法。

这两个示例都有一个简单的 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 中,我假设这会更快(即更少的 CPU),因为我已经声明了我的变量并在整个程序中添加它们。我在这里担心RAM的使用。

在示例 2 中,我认为这将导致更多的 CPU 使用,因为它必须在每次使用它们时重新声明所有变量,但也许它使用更少的 RAM?

这些只是示例,我相信它们本身不会对 CPU 或 RAM 开销造成太大影响。我会将您提供的答案中的信息应用于我的一般编码实践。

4

4 回答 4

1

我认为示例 1 应该是首选方式。

Ram 使用量不会增加太多,因为无论您是否使用 findViewById,Widget 都存在。您只能获得对所示对象的引用。

我个人使用AndroidAnnotations这允许您删除,initilizeButtons()因为您可以向字段添加一些注释,并且库会为您注入它们。在他们的网站上查看他们的代码比较......太棒了。它还支持许多其他不错的功能。最好的部分是,它使用代码生成,而不是像其他类似的库那样使用运行时反射(消耗 CPU 和性能)......

于 2013-03-13T13:16:01.570 回答
0

这取决于你的需要,

例如,如果您的活动多次与该视图一起使用,则选项 2 更好

于 2013-03-13T13:12:09.940 回答
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; 
        }
    }

}
于 2013-03-13T13:21:49.233 回答
0

内存和性能方面我看不出明显的区别。通常,建议将声明变量的范围保持尽可能小。因此,如果在您的其他活动中不再需要按钮,请不要将它们声明为类中的字段。

我个人的经验是,使用许多匿名内部类会使代码难以阅读,因此要么选择实现接口的活动,要么在封闭活动中创建小型命名内部类。

于 2013-03-13T13:37:27.427 回答