http://blog.csdn.net/ekeuy/article/details/42292589

本文介绍Android开发过程中的一些基本常识,大多是一些流程、专业术语和解决问题的方法等。

一、软件开发流程

一个完整的软件开发流程离不开策划、交互、视觉、软件、测试、维护和运营这七个环节,这七个环节并不是孤立的,它们是开发一款成功产品的前提,但每一项也都可以形成一个学科,是一个独立的岗位,随着敏捷开发的流行,以及来到了体验为王的时代,现代软件开发更多的是注重效率和敏捷,而不是循规蹈矩的遵循这些开发流程,比如软件开发的岗位不再仅仅是个技术岗位,它需要去参与前期的设计和评审、可以在视觉和交互方面提出自己的见解,在开发的过程中需要自测程序尽快解决现存问题,运营和维护的过程中也需要软件的帮助。可见现代软件开发对开发者的综合素质(这并不是facebook所讲的全栈工程师)越来越高,自称为码农或者程序猿显然是不合理的,因为这个过程是脑力劳动和体力脑动并存,称呼自己为工程师显得更为合理。

策划:需求收集(通过用户调研、灰度发布、大数据分析、竞品分析、领导拍脑袋等方式获取需求)、需求整理(将需求归类、划分优先级等)、将需求转换成解决方案(输出设计文档);

交互:从心理学(利用人性的弱点)、人性化(心智)、个性化的角度将解决方案转换成可交互的功能和界面(需要输出交互文档),比如加载等待、消息提示、页面布局、页面内和页面间的交互逻辑、页面切换动画等等,这个过程中一般会使用Axure或者PowerPoint来制作交互文档;

视觉:根据交互图,使用PhotoShop来做视觉效果,在Android上的图片格式大多是png和jpg,对于需要屏幕适配,程序又适合做屏幕适配的地方可以使用九图,格式为*.9.png。

软件:根据视觉和交互效果将需求转化为具体的实现,在实现的过程中可能会因为需求、交互或者视觉的变动导致软件实现的变动,因为策划、交互、视觉这每一个环节都可能会有信息失真的现象,或者是由于市场环境的变化、获取信息不够准确、领导拍脑袋等等情况导致软件始终处于被动状态,所以现在会提倡敏捷开发、结对编程、程序设计、同行评审、单元测试来提高程序的灵活性和稳定性;

测试:软件达到可交互的标准后,需要将可交互的程序提供测试,其中灰度发布(用户测试)、自测(开发自测)、SQA(品质保证)都算是测试;

维护和运营:通过测试程序达到稳定标准后,软件就可以上线了,软件上线后,需要去维护,用户反馈的问题要及时解决、用户有疑问要及时解答;根据后台统计信息、抓住可运营的节日、民族文化需要做运营来提高用户使用产品的粘度,让更多的用户知道、使用产品都是运营应该做的。

注:
        1、可以查看这个答案了解一个APP从创意到上线的具体流程,开发一个APP有多难?
        2、可以查看笔戈科技的这篇文章了解一个手机(平板或其它电子产品也差不多)的诞生需要哪些环节,一个手机的诞生过程

二、提问的智慧

大多数工作都是以结果为导向的,特别是软件开发这个职业,绩效考核、KPI这些都是在考核你工作的成果,所以工作更多地是需要你解决问题的能力,至于学习这个事情,还是在工作之外的时间去做吧。对于提高解决问题能力我有两个建议:

学会学习和思考:学习的过程中要广度和深度并存,Android应用开发本身对技术功底的要求不高(因为很多底层的东西都被google、框架、开源代码给封装起来了,多数时候你只需要看ReadMe或者API知道怎么用就可以了),更多地是在你遇到问题的时候知道这个问题能够通过什么方法和方式来解决。书要看,但多逛逛论坛、QQ群、Github、StackOverflow、CSDN博客专栏对自己都是有益的。

学会提问:你身边有很多资源,比如同事、StackOverflow、QQ技术交流群、搜索引擎,当你遇到问题的时候完全可以利用身边的资源来解决遇到的问题,如果一个问题在一个小时之内自己都不能够解决它,我就会通过搜索引擎、Github、QQ技术交流群、同事、StackOverflow(以上排序是按优先级排列的)来解决它。如果你需要好的答案你就需要有好的提问,特别是在QQ群或者论坛,在提问的过程中需要体现出你的思考,能够通过搜索引擎解决的问题坚决不问他人,这是对别人的尊重,在这里推荐几个链接,认真看会对你有莫大的帮助:

如何用好 Google 等搜索引擎?

程序员应该如何提问?

提问的智慧

Smart Questions

三、解决bug的方法

为了写这一项我专门在知乎上提过一个问题:你有哪些解决bug的技巧?

在知道如何快速解决bug之前,你需要知道什么是bug。没有完成策划、交互、视觉要求的功能,这不叫bug,这叫功能缺陷;一个功能完成后不能正常使用也不叫bug,因为它根本还没达到可测试的标准。我认为当你的程序达到可测试标准之后发现的问题才叫bug。综合我自己解决bug的经验和知乎上的回答,总结常见的解决bug的方法有(你想要高效解决bug的前提是你能够快速定位到缺陷所在的位置,所以以下方法多数讲的是如何快速定位问题,至于真正解决bug,需要你自己修改程序才行):

I 断点调试:

以Eclipse为例:

1、打断点:

(1)打断点:

(2)清除断点:

2、启动调试模式的两种方式:

(1)通过debug as启动调试程序:右键工程名-->Debug AS -->Android Application -->模拟器或者真机会弹出......watching for the debugger......的提示框,不要点击等待其自动消失 --> 此时已经进入调试模式,操作程序到达打断点的地方。

(2)在程序运行过程中,在DDMS视图下选中要调试的程序,启动调试模式:

3、调试:请自行尝试F5、F6、F7、F8这几个调试的快捷键;

4、watch成员变量:在调试的过程中,比如在执行for、while、do while循环、递归、系统回调等程序时可以通过watch来观察成员变量或者方法返回值的变化情况,watch的方法:

注:更多关于在Eclipse IDE中调试Android程序的知识请参见:Android eclipse中程序调试

II 打印:

打印调试的方法对于循环、异步加载、递归、JNI等代码段非常有用,特别是在循环中,在循环次数非常大时,通过打断点调试显然是一件费力的事情,这时候打印就显得更“智能”了,我通常会通过下面封装的打印调试类来输出打印信息,这个类可以打印print、log、行号、文件名、StrictMode等信息,当不需要打印信息时,只需要将DEBUG_MODE改为false就可以了:

[java] view plaincopy
  1. import android.content.Context;
  2. import android.os.StrictMode;
  3. import android.util.Log;
  4. import android.widget.Toast;
  5. /**
  6. * 调试打印类
  7. *
  8. * */
  9. public class DebugUtils{
  10. private DebugUtils( ){
  11. }
  12. public static void println( String printInfo ){
  13. if( Debug.DEBUG_MODE && null != printInfo ){
  14. System.out.println( printInfo );
  15. }
  16. }
  17. public static void print( String printInfo ){
  18. if( Debug.DEBUG_MODE && null != printInfo ){
  19. System.out.print( printInfo );
  20. }
  21. }
  22. public static void printLogI( String logInfo ){
  23. printLogI( TAG, logInfo );
  24. }
  25. public static void printLogI( String tag, String logInfo ){
  26. if( Debug.DEBUG_MODE && null != tag && null != logInfo ){
  27. Log.i( tag, logInfo );
  28. }
  29. }
  30. public static void printLogE( String logInfo ){
  31. printLogE( TAG, logInfo );
  32. }
  33. public static void printLogE( String tag, String logInfo ){
  34. if( Debug.DEBUG_MODE && null != tag && null != logInfo ){
  35. Log.e( tag, logInfo );
  36. }
  37. }
  38. public static void printLogW( String logInfo ){
  39. printLogW( TAG, logInfo );
  40. }
  41. public static void printLogW( String tag, String logInfo ){
  42. if( Debug.DEBUG_MODE && null != tag && null != logInfo ){
  43. Log.w( tag, logInfo );
  44. }
  45. }
  46. public static void printLogD( String logInfo ){
  47. printLogD( TAG, logInfo );
  48. }
  49. public static void printLogD( String tag, String logInfo ){
  50. if( Debug.DEBUG_MODE && null != tag && null != logInfo ){
  51. Log.d( tag, logInfo );
  52. }
  53. }
  54. public static void printLogV( String logInfo ){
  55. printLogV( TAG, logInfo );
  56. }
  57. public static void printLogV( String tag, String logInfo ){
  58. if( Debug.DEBUG_MODE && null != tag || null != logInfo ){
  59. Log.v( tag, logInfo );
  60. }
  61. }
  62. public static void printLogWtf( String logInfo ){
  63. printLogWtf( TAG, logInfo );
  64. }
  65. public static void printLogWtf( String tag, String logInfo ){
  66. if( Debug.DEBUG_MODE && null != tag && null != logInfo ){
  67. Log.wtf( tag, logInfo );
  68. }
  69. }
  70. public static void showToast( Context context, String toastInfo ){
  71. if( null != context && null != toastInfo ){
  72. Toast.makeText( context, toastInfo, Toast.LENGTH_LONG ).show( );
  73. }
  74. }
  75. public static void showToast( Context context, String toastInfo, int timeLen ){
  76. if( null != context && null != toastInfo && ( timeLen > 0 ) ){
  77. Toast.makeText( context, toastInfo, timeLen ).show( );
  78. }
  79. }
  80. public static void printBaseInfo( ){
  81. if( Debug.DEBUG_MODE ){
  82. StringBuffer strBuffer = new StringBuffer( );
  83. StackTraceElement[ ] stackTrace = new Throwable( ).getStackTrace( );
  84. strBuffer.append( "; class:" ).append( stackTrace[ 1 ].getClassName( ) )
  85. .append( "; method:" ).append( stackTrace[ 1 ].getMethodName( ) )
  86. .append( "; number:" ).append( stackTrace[ 1 ].getLineNumber( ) )
  87. .append( "; fileName:" ).append( stackTrace[ 1 ].getFileName( ) );

Android开发过程中的一些基本常识相关推荐

  1. Android开发过程中在sh,py,mk文件中添加log信息的方法

    Android开发过程中在sh,py,mk文件中添加log信息的方法 在sh文件中: echo "this is a log info" + $info 在py文件中: print ...

  2. Android开发过程中的部分经验总结

    该文章为Android App 开发过程中遇到的常见问题总结,该总结也会持续不断的优化 完善当中.后续开发中一定会遇到各种各样的问题, 这些问题会酌情不断补充进来. 我将遇到的问题分为两大类,非技术问 ...

  3. android 开发过程中涉及到的清除缓存操作

    android 开发过程中会遇到很多缓存,常常使人摸不清楚,这里总结一下,希望下次遇到缓存相关问题能有所帮助. Clean Project 点击 Clean Project 会执行 clean.:ap ...

  4. android开发过程中遇到的问题

    记录android开发过程中遇到的问题. 1.在一个xml中能否使用同一个include多次 http://www.apkbus.com/android-104152-1-1.html android ...

  5. android开发过程中一些遇到的问题

    记录android开发过程中遇到的问题. 1.在一个xml中能否使用同一个include多次 http://www.apkbus.com/android-104152-1-1.html android ...

  6. 搬砖之路----MusicPlayer 一个基于Vlc(2.0+)开发的android音乐播放器--浅析在android开发过程中播放器选择之路!

    前言 MusicPlayer 是一款基于vlc播放器开发的一个音乐播放器,你也可以理解为在此核心上的搬砖之路,核心的内容并不是我写的,因此在正式写blog之前,感谢那些vlc核心的开发人员让我用到这么 ...

  7. 记录的Android开发过程中遇到的问题。

    180508  更新 网上下载demo 本地studio版本和demo版本不一致处理方式 修改两处 1 项目的build.gradle 里面classpath 2修改项目目录下 gradle--> ...

  8. Android开发过程中内存泄露检测

    转自 http://blog.csdn.net/shimiso/article/details/44677041 一.内存泄露 内存泄漏会因为减少可用内存的数量从而降低计算机的性能.最终,在最糟糕的情 ...

  9. android开发中遇到的技术难题,android开发过程中遇到的问题以及解决办法

    ####编译的时候遇到的问题: "android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original th ...

最新文章

  1. mysql5.6 分布式事务_mysql 分布式事务xa 示例
  2. 比特币前核心开发者Mike Hearn三年前的预测一一应验
  3. 服务器发送退出状态127,WebDriverException:消息:服务chromedriver意外退出。状态代码为:127...
  4. 在Windows Mobile和Wince(Windows Embedded CE)下进行Native C++开发,如何取出当前执行文件的路径和调用模块的路径...
  5. P1433 吃奶酪(状压dp)
  6. 【TensorFlow】——索引与切片
  7. 蓝桥杯scratch_又是福州第一!信息学编程竞赛“蓝桥杯”公布福建省赛榜单
  8. CDN---共享单车算啥,阿里云发布共享网络黑科技PCDN,降低视频行业75%的成本
  9. DotCMS安装步骤
  10. Julia的学习资料从哪里找?
  11. python邮件群发_Python操作Gmail@定时定向群发邮件
  12. python安装numpy库教程_Python库之numpy库的安装教程
  13. alps interview
  14. PHPExcel出现 Formula Error的解决方案
  15. VDI IDV VOI
  16. 哪些东西做引流产品比较好?哪些商品是每天比较受欢迎的?
  17. 立体视觉入门指南(6):对级约束与Fusiello法极线校正
  18. 港科夜闻|沈向洋教授获委任为香港科大校董会主席
  19. day02 软考习题理解
  20. maven 入门(转)

热门文章

  1. twctf_2018_bbq
  2. 【分享】“抖店“在集简云平台集成应用的常见问题与解决方案
  3. HCL_H3CNE综合实验
  4. Parameters: { “silent“ } might not be used. This may not be accurate due to some parameters are
  5. 交互式多模型-粒子滤波IMM-PF—在机动目标跟踪中的应用/matlab实现
  6. go语言 第三方包安装方法_【分享吧】Go语言第三方包的使用介绍与场景应用
  7. Anti-pattern
  8. dwz 表单提交 html,DWZ文件上传表单提交
  9. codeforces 1000A,T-sthirt
  10. 河南计算机专业最好的独立学院,河南省排名前十的大学-河南省民办大学排名-河南省独立学院排名...