Android编码最佳实践/设计模式

30

最近我提出了一个问题,然后被引导到这个网站:http://developer.android.com/design/index.html

这是一个非常好的网站,但是它没有回答一个具体的问题:在编写应用程序代码时采用哪些最佳实践/设计模式?

我查找了MVC/MVP等内容,虽然可以得到结果,但只是关于实际实现所述模式,而不是其他可用选项等。

我尝试对Android默认安装的各种应用程序进行反编译和分析,例如Market,但我无法在Google的代码中找到结构。有人有关于如何设置Android应用程序以使其可维护、可扩展等方面的建议吗?我知道这些词汇的涵义很广,而且对于程序员来说纯属主观,但我无法用其他方式表达这个问题。

我已经遇到的一种最佳实践是每个Activity对应一个View,并在应用程序中拥有许多Activities以便返回栈能够正常工作,但除此之外,我不知道如何实际设置Activity本身。


2
我建议你创建自己的命名规则,可以在项目中使用。例如,命名Activities和Fragments,这样你就知道是什么,而不必打开它。对于布局文件也要做同样的事情。此外,请确保您有一个合理的包名称,并将类分开放置在其中。否则,只需确保您能够阅读它,那就没问题 :) - Mimminito
当然,我通常会将Java规范与一点CamelCase混合使用。当涉及到命名约定并强制执行它们时,你可以称呼我为OCD——甚至会指出我的同事的问题:P 我“喜欢”清晰的代码:3 - Lennard Fonteijn
https://dev59.com/b3A75IYBdhLWcg3wi5sr 可能有一些答案。 - zapl
http://www.slideshare.net/retomeier/being-epic-best-practices-for-building-android-apps 和 http://stackoverflow.com/questions/2961049/effective-android-programming-techniques 都是很好的收藏。 - Chris
4个回答

19
首先,阅读API指南,特别是关于活动片段的部分。但如果你有时间,建议阅读所有API指南,它们是了解Android开发的极好资源。
根据您想要支持的Android设备,我建议使用v4支持库v7 Appcompat库。我总是使用第一个(v4 Support Library),因为它支持嵌套片段(getChildFragmentManager()-在< API 18上不支持原生),以及ViewPager。Appcompat库主要用于支持Android版本低于4.0的设备上的操作栏。
我也会研究Gradle作为您的构建系统和(免费)或IntelliJ IDEA(商业版)作为您的IDE。
考虑到第三方库,我看到这些天主要使用的库堆栈(大多数情况下我自己也在使用)是:
  • Guava作为一般Java辅助库。
  • 依赖注入使用DaggerButterKnife
  • OkHttp作为HTTP传输库。
  • RetroFitVolley 作为REST库。
  • Picasso 作为图片加载库。在 Android 中,当您需要从服务器下载/显示图像时,拥有一个良好的图像加载库非常重要,因为它会处理内存管理和缓存,如果您试图自己完成这些任务,则可能会非常困难。

其他经常使用的替代品:

我使用并推荐的其他库:

Chris Banes(著名的 Android 开发者)最近发布了他其中一个应用程序的源代码,您可以将其作为使用上述库构建 Android 应用程序的示例。


18

首先,你需要深入地学习Android活动。全面理解这个概念后,从那里开始会更容易向前发展。不要过早涉及Java设计模式,否则你会试图将问题套入模式中,这样做通常不会有好的结果。应该在Android开发者网站上阅读示例代码,并尽可能多地编写代码。

我刚刚创建了一个名为“Android App Patterns”网站-http://android-app-patterns.com,其中展示了一些流行应用程序在Android平台上遵循的不同UI元素和交互模式。

有许多库可帮助您轻松实现上述模式。例如:

  1. GreenDroid-https://github.com/cyrilmottier/GreenDroid
  2. ActionBarSherlock-https://github.com/JakeWharton/ActionBarSherlock
  3. Android View Badger-https://github.com/jgilfelt/android-viewbadger-用于通知
  4. NineOldAndroids-https://github.com/JakeWharton/NineOldAndroids-从HoneyComb的动画API一直使用到版本1.0
  5. Ignition:https://github.com/kaeppler/ignition-为常见的Android任务提供许多帮助程序

谢谢你提供的链接,GreenDroid看起来很有趣。你的网站也很棒,对酷炫设计进行了全面而精彩的概述! - Lennard Fonteijn
谢谢。 :) 一旦我有时间,就必须添加更多内容。 - Abhinav
到目前为止,这些库似乎都已经过时了(不再维护):( - Gohan
你的网站太棒了!我喜欢这个想法。有很多关于酷设计的启发。 - Silvia H

4
你应该观看(来自Google IO 2011): http://www.youtube.com/watch?v=WGIU2JX1U5Y 虽然它不是关于ICS的,而是关于honeycomb,但仍然非常有趣...
你会发现ActionBar(也有一些库可以让你在旧版本的Android上实现ActionBar)变得越来越重要,并且可以在大多数谷歌Android应用程序中找到...
此外,ViewPager被广泛使用(用于在不同的选项卡/视图之间水平滑动),如在市场中...
为了保持项目的整洁,您可以为每个活动提供单独的xml文件,您使用的重复元素应该保存在单独的xml文件中,您可以将其包含在任何其他xml文件中(页脚、页眉、分隔符等)
希望这可以帮助您!

谢谢你的视频。我所提到的问题是关于ActionBar的,所以我一定会使用它,因为我也喜欢它的概念。我确实正在寻找像你最后一段所说的那样的技巧,现在你说了,我注意到市场源代码中有数百个XML文件。请继续分享这些内容,我很想得到更多的技巧 - 甚至是代码示例。 - Lennard Fonteijn
我读了一篇关于 Play Store(市场)以及它为什么糟糕的文章... 我现在找不到了,但我认为作者在他的论点上是正确的:Play Store 目前的设计与 Google 的其他应用完全不同,它很暗,而其他 Google 应用程序则更加轻盈和用户友好...因此,我会更多地关注日历,Gmail,消息传递,人员应用程序以获取好的布局实践... - Ferdau
据我所知,这是一个混合了不同包、看似无关且臃肿的类的杂糅体,因此我想问是否有任何好的约定可以遵循,或者每个人都只是按照自己认为正确的方式去做。 - Lennard Fonteijn
更多与代码相关的内容:静态视图使用1个XML,对于动态视图(例如详细屏幕,在该屏幕中您必须隐藏大多数单元格并仅显示少量单元格),在这种情况下,我更喜欢从代码中创建我的布局,其中我将LinearLayout作为容器,并仅添加所需的单元格... - Ferdau
返回元素时,请使用“包括”;返回布局属性(如HTML中的h1、h2等)时,请使用“样式”。 - Ferdau

0

一个Android应用应该要快速。嗯,更准确地说,应该是要高效。也就是说,在移动设备环境中,它应该尽可能地以高效的方式执行,考虑到有限的计算能力和数据存储、较小的屏幕以及有限的电池寿命。

在这篇博客中,我将提供一些设计性能的最佳实践。

想要了解更多,请阅读。

http://www.onsandroid.com/2014/10/android-application-designing-for.html

http://www.onsandroid.com/2013/01/android-best-practices.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接