我正在寻找的是更好的编码,包括内存管理,更快的处理和更清晰的编码等参数。有没有一套适用于Android的良好编码指南,我们可以使用它来制作更好的应用程序。例如;
以下哪项约定更好:
TextView tv = (TextView) findViewById(R.id.sampleTextView);
tv.setText("Hello World");
- 或 -
((TextView) findViewById(R.id.sampleTextView)).setText("Hello World");
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上开发了一年多了,我认为任何人都可以进行编码,但编码干净,正确就是最重要的。有人可以建议或帮助他们的经验和知识。
答案 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留下。
如果我错了,请纠正我。