更好的Android编码

时间:2010-12-26 16:11:48

标签: android coding-style

我正在寻找的是更好的编码,包括内存管理,更快的处理和更清晰的编码等参数。有没有一套适用于Android的良好编码指南,我们可以使用它来制作更好的应用程序。例如;

以下哪项约定更好:

示例 - 1

TextView tv = (TextView) findViewById(R.id.sampleTextView);
tv.setText("Hello World");

- 或 -

((TextView)  findViewById(R.id.sampleTextView)).setText("Hello World");

示例 - 2

BroadcastReceiver br = new BroadcastReceiver() {
      ...
      ...
}

IntentFilter filter = new IntentFilter(...);
registerReceiver(filter, br);

- 或 -

registerReceiver(new IntentFilter(), br);

- 或 -

registerReceiver(new IntentFilter(), new BroadcastReceiver());

这将导致较少的内存使用量,并有助于更快地收集垃圾。我在Android Framework中看到了这两种类型的编码(在Gingerbread和Froyo中)。

我现在已经在Android上开发了一年多了,我认为任何人都可以进行编码,但编码干净,正确就是最重要的。有人可以建议或帮助他们的经验和知识。

5 个答案:

答案 0 :(得分:4)

除非您在应用程序中看到显着的性能损失,否则这些微优化并不值得担心。在任何情况下,我都认为编译器甚至可以推导出示例1a =示例1b。它们之间的性能差异最多只能达到几百纳秒,因为电视是一个参考,移动便宜。

我的建议是以尽可能使您和您的团队可读的方式编写代码。如果您需要更好的性能,更好的算法将有助于更多。如果您已经使用了那些更好的算法,那么您应该尝试使用分析器来确定哪个算法更快。

答案 1 :(得分:0)

对于您提供的两个示例,您提到的各种替代方案之间没有区别。

如果您想深入研究这个问题,请编写一些您想要检查的示例代码,将其编译到jar中,然后在其上使用反汇编程序来查看正在生成的字节码。您应该看到每个案例中的字节码基本相同。

答案 2 :(得分:0)

您的示例在内存管理或处理器时间等方面几乎没有任何意义。编译器将在两个示例中内联变量。即使他没有开销只是一个对象参考。没有基准可以向你展示这种差异。

在这种情况下,更喜欢编写可读代码。

在数据库工作或图像/视频处理方面,你应该更加关注它在真正值得的地方的表现。

AFAIK,对于android没有任何特别的建议。所有这些都是关于使用内存,数据库,网络等的一般建议。

阅读Joshua Block的Effective Java,这就足够了。

答案 3 :(得分:0)

我同意其他所有人说这种类型的优化不会做任何你能注意到的事情。

您应该考虑优化的唯一情况是手动实现复杂的绘制方法,或者解析大型xml文件(某些更改可能会缩短运行时间)。

无论如何,在优化之前,总是要测量。

  

您无法优化无法衡量的内容

要了解如何分析您的应用程序,请阅读

http://www.jpct.net/wiki/index.php/Profiling_Android_Applications

答案 4 :(得分:0)

感谢您的回复。看完之后我觉得我完全同意你的意见,尤其是SapphireSun。看到这两种编码,我想知道内联是否对其他类型的编码有任何优缺点。

但据我认为最好使用声明,如((TextView)findViewById(R.id.sampleTextView))。setText(“Hello World”);而不是将它分配给临时变量,因为这会增加一个对象引用,当GC被勾选时,它会被垃圾收集。但是如上所述,我猜这个对象没有被GC留下。

如果我错了,请纠正我。