Android开发
来源:互联网 发布:windows按键双系统切换 编辑:程序博客网 时间:2024/06/11 13:01
Android开发
sf2gis@163.com
2015年12月26日
2016年1月11日增加GUI模型
1 目标:在Android系统开发应用,并发布APK。
开发、调试、测试、日志等并发布APK。
2 原理:使用AndroidStudio(自带SDK,下称AS)开发。
参考:疯狂Android讲义第2、3版。
3 流程:安装AS,编写程序,发布APK。
参考:http://jingyan.baidu.com/article/90895e0fce970264ec6b0bf2.html
3.1 安装AS:官网安装JDK(参见Java),官网下载AS(需使用迅雷,无法直接下载),默认安装。
3.2 编写程序
3.2.1File->New->New Project(如果是首次进入AS,会出现QuickStart界面,选择NewProject)。
3.2.2输入程序名称和公司名称作为包目录。
3.2.3选择SDK(默认15)和Blank Activity。
3.2.4设置页面(默认):
3.2.5程序将自动创建Hello,World页面。
3.2.6修改页面:选择Content_main.xml,选择界面上的Label,在右侧的text属性中设置为HelloWorld,Android!。
3.3 运行,选择运行设备(本机采用真机调试)。
注意:如果装有豌豆荚,可能会导致ADB无法启动,请关闭所有相关的exe进程。
3.3.1设备显示HelloWorld,Android!界面。
3.4 导出APK:设置加密签名,导出
参考:http://chenfeicqq.iteye.com/blog/1889160
3.4.1Build-》导出APK。
3.4.2如果没有签名,需要先建立签名;如果有,可以选择已有的。
3.4.3选择导出目录,完成后可以查看生成的APK。
4 方法:Android系统程序开发模型
参考:android高级编程,疯狂Android讲义。
4.1 系统模型:OS统一管理程序单元和系统资源
参考:http://blog.sina.com.cn/s/blog_55b1b0d50100i8k9.html
操作系统管理进程、线程、回收等资源。APK、Activity、Service等都是程序单元和组织,由系统统一管理。
Andorid系统模型类似一个互联网,OS作为服务器管理硬件资源,程序作为网站向外提供服务。
OS:统一管理程序单元
-|进程,由OS统一管理、回收,程序单元无法控制
--|线程,由OS统一管理、回收,程序单元无法控制
4.2 程序结构:程序单元的组织
类似HTTP服务,网页由Activity模拟,Web服务由Service模拟,TCP、UDP由intent/intentFilter、ContentProvider/ContentResolver、BroadcastResolver/*.sendBroadcast模拟。
4.2.1总体配置:AndroidManifest.xml。
管理全局属性,配置程序单元。
4.2.2前端View:Activity作为一个视图。
组织结构:
Activity:逻辑组织(类似JS),处理Res的Layout等View元素。
Res:常变资源(类似HTML),将被编译为R.java的类,从其中直接操作XML中定义的资源。
4.2.3后端Model:Service提供服务。
需要connect或bind到Service才能使用服务。
4.2.4前后端交互Controller:intent/intentFilter提供控制器功能。
4.2.5进程间通信:ContentProvider/ContentResolver。
4.2.6广播-订阅消息:BroadcastResolver/*.sendBroadcast。
可以接受感兴趣的广播。
4.3 资源管理框架:松耦合的资源配置
参考:http://www.cnblogs.com/mfryf/archive/2013/05/21/3090726.html
http://segmentfault.com/a/1190000002924501
4.3.1目标:解耦Model和View,模拟HTML。由HTML、CSS提供前端界面,由JS组织逻辑,后台提供Model。
4.3.2原理:使用XML处理前端,使用Activity作为组织逻辑,由Service提供Model。
4.3.3方法:
4.3.3.1 组织结构:
assets:不编译,直接使用。
Res:编译为R.java
-|Layout:布局
--|Window:绘制窗口
---|Control:具体的组件
---|…
-|menu:菜单
-|value:各种值(类似枚举)
…
4.3.3.2 Res使用方法:R.java
View直接使用Layout的文件名称
setContentView(R.layout.activity_main);
编译为R.java类,从其中直接读取ID等,可以取得相应的资源。
增加资源:@+资源类型/名称。
定义id
android:id="@+id/button"
读取id代表的资源:(资源类型)findViewById(R.id.名称)。
使用id获取资源
Button button = (Button)findViewById(R.id.button);
在XML中引用资源:@【包名:】类型/id
使用系统资源:android.R。xml中使用@android:类型/id
参考:http://www.cnblogs.com/greatverve/archive/2011/12/27/Android-xml.html
http://blog.csdn.net/ocean20/article/details/44198453
http://blog.csdn.net/leichelle/article/details/7949484
4.3.3.3 Assets使用方法:AssetManager
AssetManager am=getAssets();
InputStream is =assset.open("filename");
4.4 GUI模型:底层由JVM调用OS的GUI实现,JVM的基本绘图单元为Drawable,Drawable+事件循环构成基本交互单元View,View+java逻辑构成基本交互页面。
参考:http://www.cnblogs.com/warioland/archive/2011/10/26/2224845.html
http://zhchzh1000.iteye.com/blog/747620
5 方法:前端视图Activity
参见:Android开发-前端视图Activity.docx
6 方法:IDE AndroidStudio
6.1 解决adb notresponding if youd like to retry...错误
参考:http://vcsos.com/Article/pageSource/140816/20140816162242.shtml
http://blog.csdn.net/afterwinter/article/details/44243891
原因:ADB使用TCP 5037端口,如果被占用,则无法启动。
解决方法:查找TCP 5037占用的进程,关闭此进程。
netstat -aon|findstr "5037"
6.2 查看调试信息输出:Log.v(),Log.d(),Log.i(),Log.w(),Log.e()
参考:http://jojol-zhou.iteye.com/blog/696567
可以使用Log类的静态函数(verbose,debug,info,warning,error对应的函数)输出调试信息(会调用println()输出),也可以直接调用System.out.println()输出(可以使用info过滤)。
Verbose:所有log信息。
Debug,Info,Warning,Error级别逐渐提高。
示例
public void click3(View source){
((TextView)findViewById(R.id.textView)).setText("Button3.clicked!");
System.out.println("btn3 click.");
Log.v("btn3","verbose");
Log.d("btn3","debug");
Log.i("btn3","info");
Log.w("btn3","warning");
Log.e("btn3","error");
}
6.3 设置APILevel
参考:
http://stackoverflow.com/questions/21449947/how-do-i-set-the-minimum-api-level-for-projects-in-android-studio
File-》ProjectStructure-》App-》Flavor-》Mini SDK Version。
设置后等待工程更新。
6.4 颜色ARGB:默认使用ARGB的十六进制表示,也可以指定RGB或HSB。
7 方法:后端Model-Service
参见:Android开发-后端Model_Service.docx
8 方法:前后端控制器intent
参见:Android开发-前后端控制器intent.docx
9 方法:进程间通信ContentProvider/ContentResolver
9.1 目标:不同应用之间通信。
9.2 原理:Android作为系统服务器,通过content协议提供类似Web服务,通过指定的uri进行通信。
9.3 流程:创建服务ContentProvider类,指定uri,使用ContentResolver调用服务。
9.3.1创建服务ContentProvider类
9.3.2指定uri
9.3.3使用ContentResolver调用服务。
9.4 方法:
10 方法:广播-订阅消息BroadcastResolver/*.sendBroadcast
10.1 目标:系统级监听器,监听符合条件的系统级广播。
10.2 原理:Android作为系统服务器,发布方应用通过Broadcast广播发布消息,接收方配置过滤消息的IntentFilter拦截需要的消息和处理类(使用BroadcastReceiver处理消息)。
10.3 流程:设置广播消息intent,发布广播;配置过滤器和处理器,创建BroadcastReceiver处理消息。
11 方法:3D图形
12 方法:GPS
13 方法:GoogleMap
- android 开发
- Android 开发
- Android 开发
- android开发
- android开发
- android开发
- Android开发
- Android开发
- Android开发
- android开发
- android开发
- Android 开发
- Android开发
- Android 开发
- Android 开发
- Android开发
- android 开发
- android 开发
- POJ 1740 A New Stone Game
- c++平台国际化前期工作技巧
- iOS 一种自定义颜色的方法
- 用户强制退出
- round、floor和ceil的使用
- Android开发
- idea14 -注册机
- ArcGIS中QueryTask,FindTask,IndentifyTask 之间的区别
- POJ 3614 Pseudoprime numbers(快速幂)
- IOS开发UI-------UIView(视图)
- GridView布局
- #ifndef的介绍
- Git备忘
- xhprof 在5.6+版本的php中报错