zoukankan      html  css  js  c++  java
  • Android_app项目开发步骤总结

    做了几个android企业应用项目后,总结了项目的基本开发步骤。希望可以交流。

     
    一 应用规划: 
        ※确定功能。 
        ※必须的界面及界面跳转的流程。 
        ※须要的数据及数据的来源及格式。 
        ※是否须要服务端支持。 
        ※是否须要本地数据库支持。 
        ※是否须要特殊权限。 
        ※是否须要后台服务。 
    二 架构设计: 
        ※分层。 
        ※网络连接。 
        ※数据处理-xml、domain。 
        ※封装Activity。

     
    三 界面设计: 
        ※主界面确定。 
        ※模块界面、列表、查看、编辑界面。

     
        ※菜单、button、对话框、提示信息。

     
        ※界面整体颜色。

     
    四 数据操作和存储: 
        ※数据来源。

     
        ※数据类型。 
        ※存储方式。

     
    五 业务实现: 
        ※client业务解析。 
    六 页面跳转: 
        ※每一个页面间的跳转。 
        ※菜单、button、事件等。

    keyword:android app, android develop, android summary

         从2010.04启动该项目到如今完毕主要功能模块,分享一下开发历程和注意事项。 
         开发环境: ubuntu7.10 +eclipse 3.5 + sdk
         以下是开发总结: 

    1.     基于源代码级的SDK以及SDK升级注意事项

    o    熟悉其怎样做资源国际化

    o    熟悉其怎样支持不同屏幕大小,不同density介质

    o    熟悉其基本的API以及支持的最低版本号和不被再支持的API

    o    了解其分层架构

    o    升级SDK

    §  确保该平台支持相关的cglib版本号(否则要升级ubuntu)

    §  简单容行的方式是remove ~/.android下的相关东西,remove先前的相关版本号,再升级

    §  部分Resources(如strings中有%s的)可能须要改动才干适应新的版本号

    §  新的sdk里可能不包含老的如2.01版本号

    2.     Emulator & Mobile

    o    用adb shell 操作emulator

    §  http://www.javaeye.com/topic/260042

    o    push / pull file in emulator

    §  Eclipse->window->Show View->File Explorer->pull a file from the device(or push a file onto the device)

    o    用 real mobile连接usb来直接測试(mobile 必须设置为develop/debug mode)

    §  http://dimitar.me/how-to-connect-your-android-phone-to-ubuntu-to-do-developmenttestinginstallations-or-tethering/

    o    emulator更能用于性能測试,功能測试。而mobile更适合触摸操作測试和一些View的真实展现測试

    o    屏幕大小适应測试(枚举大,中,小),屏幕方向(枚举横,竖屏),任务切换測试

    o    内存适应仅仅能在mobile上做測试

    3.     系统配置项

    o    SharedPreferences存储位置及怎样在emulator上手动改动

    §  找到存储位置: datadatayour package dirshared_prefsyour xml files

    §  依照上面的pull/push the file

    o    SQLite(sqlite3)

    §  默认存储位置:datadatayour package dirdatabasesyour database name

    §  依照上面的用adb shell 操作emulator做部分database的设计和数据更新

    §  设计版本号更新和升级

    o    Other File I/O

    §  assert下文件读取

    §  文件权限以及读写

    o    解读AndroidManifest.xml

    §  application/process标识

    §  最開始启动的activity

    §  activity栈的形式(指定taskAffinity&launchMode="singleTask"),并且转向一个新的activity是用intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)的形式

    §  须要的权限部分

    §  支持的最低版本号

    4.     基于View,Context,Manager的开发

    o    系统View & Layout(Layout也是View)

    §  用View本身来做其它Layout间的一个分隔

    §  经常使用的View&Layout:ListView,ScrollView,RelativeLayout,TableLayout

    §  设计经常使用的style/theme用到的Drawable: http://idunnolol.com/android/drawables.html

    §  经常使用的图片操作

    §  指定颜色的渲染(setColorFilter)

    §  剪裁

    o    自己定义View & Layout

    §  Java代码 

    1. public class TouchListView extends ListView {  public TouchListView(Context context, AttributeSet attrs, int defStyle) {  

    2. } }   

    §  Java代码 

    1. public class Toolbar extends LinearLayout {  

    2.     public Toolbar(final Context context) {  

    3.         super(context);  

    4.     }  

    5.       

    6.     public Toolbar(final Context con, AttributeSet attrs) {  

    7.   }  

    8.   

    9. }  

     

    o    Application,Activity,Service,View,Intent

    §  Application,Activity,Service与Context的关系

    §  View与Context的关系

    §  用Application来做Activity,Service,View间的全局变量(这比自己用Singleton实现好)

    §  用工厂模式使用Intent

    §  做activity跳转

    §  sendBroadcast(实时数据交换可借助Thread+ BroadcastReceiver)

    o    WindowManager 、PackageManager 等的使用

    2.     网络IO

    o    java.net

    o    android.net

    o    org.apache.http

    §  假设没有让他在AsyncTask中操作。则他的TimeOut设置必须少于5秒(为ANR等待时间)

    §  java.net.UnknownHostException

    §  假设发生在emulator,可參考: http://www.javaeye.com/topic/521023

    §  假设发生在mobile,则通常是DNS解析问题,要么同意用户再重试操作。要么把Host的域名改为public ip address

    3.     画图部分

    o    在View上画图

    §  仅仅在原来View上加边框等

    §  Java代码 

    1. @Override  

    2.     protected void dispatchDraw(Canvas canvas) {}  

     

    §  自己定义View

    §  Java代码 

    1. @Override  

    2.     protected void onDraw(Canvas canvas) {  

     

    o    在Bitmap上画图

    §  Java代码 

    1. Bitmap result = Bitmap.createBitmap(48,48, Config.ARGB_8888);    

    2.          Canvas canvas =  new   Canvas(result);    

    3. ...  

    4. canvas.drawBitmap(result, rect, rect, paint);  

     

    2.     动画

    o    帧动画

    §  控制侦速率在25FPS以让其更流畅

    o     渐变动画

    §  平移

    §  缩放

    §  旋转

    §  透明

    3.     ANR

    o    构建消息以及消息循环处理Handler

    o    使用AsyncTask

    4.     Exception & UncaughtException

    o    使用UncaughtExceptionHandler

    5.     引入第三方jar以及与其它app共享数据

    o    通过add user library方式加入第三方jar

    o    Content Provider的使用 

    6.     性能优化/调优 

    o    基于View的优化http://dl.javaeye.com/topics/download/774b3e9e-1c48-33bd-bc9d-5c27da998181

    o    代码级的规范

    o    Method级的调优

    §  Method Profiling(假设直接usb连接mobile,须要root权限作此项)

    o    GC分析

    §  使用Allocation Tracker

     
     源文档下载

  • 相关阅读:
    ACM的算法分类 2015-04-16 14:25 22人阅读 评论(0) 收藏
    初学Larevel 2014-08-21 11:24 90人阅读 评论(0) 收藏
    初学PHP&MySQL 2014-05-31 12:40 92人阅读 评论(0) 收藏
    codeforces 570 E. Pig and Palindromes (dp)
    codeforces 570 D. Tree Requests (dfs序)
    poj 2157 Maze (bfs)
    cf 570 C. Replacement (暴力)
    cf 570B B. Simple Game(构造)
    cf 570 A. Elections
    hdu 1429胜利大逃亡(续) (bfs+状态压缩)
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5093189.html
Copyright © 2011-2022 走看看