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

     
     源文档下载

  • 相关阅读:
    使用opencv工程
    面试官最爱问的问题背后真相
    哎,哎,去了清华园
    突然发现兰皙欧洗面奶不错
    crs.exe 进程管理里面的流氓进程之封杀
    初步使用OpenCV
    动态网站基础
    Java IO -- 序列化的疑问
    建造模式
    MYSQL 从头开始-2(join)
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5093189.html
Copyright © 2011-2022 走看看