安卓源码怎么用 android应用开发详解 这本书里面18章(无线点餐系统)的“服务器端”有源代码
你这个应该是JSP的页面吧,先配置好本地的服务器环境,比如用Tomcat 做服务器 先弄好这个,然后再装好MySQL数据库,修改一下你页面中连接数据库的文件的信息,然后再上eclipse配置下你的客户端的访问地址等。。。差不多就是这个步骤了
JAVA的培训所花时间大概为一个学期也就是4个月(视能力而定),Android因为是由java语言进行开发的,学习了JAVA之后,学习Android的时间成本就低一些,假设你只是做一个后台Android来说的话2个月足够了。
学习路线大概是这样的,根据现实情况可以进行删减:
A。Java基础
a) Java基础语法:具体的知识点列表可以在这里下载:《Java知识点列表》V10。这部分内容没有讨价还价的余地,必须烂熟于胸。至于具体的学习方法,可以看书或者是看视频,但是关键是要多加练习,无论是书上的练习还是视频里面的练习,都需要仔仔细细的完成;
b)设计模式:由于在Android系统的框架层当中,使用了大量的设计模式,如果没有这个方面的知识,对于Android的理解就会大打折扣。设计模式的种类非常之多,一个一个的全部掌握,是不现实的,必须首先掌握面向对象的基础设计原则,有了这些基础原则的支持,就可以举一反三。这部分内容可以在《Effective Java》和《AgileSoftwareDevelopment:Principles,PatternsandPractices》这两本书中找到。
2Linux基础知识
3数据库基础知识
4网络协议
5Android基础知识
6服务器端开发知识
a)Java EE:就是上面邮件当中所提到的SSH—Struts+Spring+Hibernate。这种技术的优点的功能完整、强大,已经使用了很多年,而且既然大家已经非常熟悉Java了,那么学习SSH看起来也顺理成章。但是使用这种技术开发服务器端程序,非常麻烦。即使是一些简单的功能,也可能需要大量的代码和配置文件来实现;(缺点)
b)PHP:简单易学,开发快速。但是我们需要多学一种语言,是否得不偿失,就要大家自己判断了;
c)NET:这项技术的特点和Java EE差不多,但是要想掌握NET,则需要掌握c#,也是个麻烦的事情;
上面的路线,你可以根据自己的情况进行删减,对于java部分内容的学习,跟新手一点建议,可以参考李刚系列的疯狂JAVA系列,讲的特别通俗易懂,按照上面的路,记住一定要上机操作,如果没有几个实际项目的历练,是无法适应公司的需求。
学习android注意事项:
1,android技术准备实训目标:通过这部分的学习,学员能够达到学习android开发课程的基本要求。熟练使用Java语言,实现GUI桌面应用程序的开发JDK的安装和配置开发工具Eclipse34安装。实训知识点: Java标识符、数据类型流程控制、面向对象编程、继承、抽象类、接口、包、异常、IO流、Swing、游戏算法介绍
,2,android入门实训目标:通过这部分的学习,学员具备了android程序开发的能力,能独立完成常用的应用软件。实训知识点: Android系统概述和内置工具、Android 开发环境的搭建和启动模拟器、建立android工程、Android应用程序开发及运行编译结构、API参考文档的使用、使用am工具启动android应用程序、部署应用到真实手机、控件和事件编程、菜单编程、对话框编程、视图组编程、各种布局的使用、Grid视图组、List视图组、使用Tab组织UI
,3,android进阶实训目标:通过这部分的学习,学员的android开发能力会有大幅提高。等传感器编程、android优化和性能提高。实训知识点及案例分析:Service概述、创建和启动、生命周期、权限及跨进程调用;广播的概念及生命周期、广播发送的权限广播接收器的实现、接收SMS短信、播放MP3;内容提供器的概念作用和常见接口、使用内容提供器实现增删改查、内容提供其权限和创建内容提供器、SQLite数据库添删改查操作、使用list视图组显示数据;Widget概念和制作方法、Widget各种XML描述文件详解2D图形图像及文本、Gallery UI编程、GridView编程、OnDraw编程、drawable编程基本动画编程技巧、Tween动画、Frame动画、TimerOpenGL ES的2D和3D绘图GPS服务、GPRS网络使用、android蓝牙开发、android方向、加速表、光线、磁场、临近性、温度
4,项目实战实训目标:本阶段让学员开发,设计Android网上购物系统,其中包括Android图形界面开发,Android声音,Android网络通讯,和服务器后端进行通讯交换数据。
Android基础知识:
一、Android开发的分类:
1、Android客户端应用程序
如新浪微博、网银客户端、凡客、淘宝客户端,快盘客户端。Android在这里的应用还是界面层的东西为主。核心还在WEB。客户端界面很重要,用户体验度很重要。从应用需求上来讲,几乎大一点的网站,都需要有手机客户端程序。
2、Android通用类程序
如基于LBS(基于位置的服务)的应用 (这类一般会嵌入到客户端应用程序中),流媒体播放应用。由于移动设备的方便便捷、3G、4G网络的发展,这类应用有不错的前景。
3、Android游戏开发
需要掌握的游戏引擎LGame,游戏框架等。手机上的游戏会是一大块内容,有前途。
4、Android底层开发
需要掌握C、Linux等较底层的东西,发展方向应该是驱动、协议开发,嵌入式开发。
开始学习了解一般从界面、控件开始,这也是大部分人认为简单、比较快上手的原因。学习一段时间后,自己可以定一个方向发展。
二、Android学习需要哪些知识点
1、Java基础知识
J2SE:Java基础类(lang包,IO包,util包(集合框架),面向对象,多线程,网络编程)
2、J2EE知识
如果你想从事的Android客户端应用程序的开发,这部分知识是必备的。显然Android客户端只是做的数据的请求、展现,所需的数据在服务器端。
技能点:Tomcat(Weblogic),XML解析,JSON解析,JSP/Servlet。了解SSH。
3、Linux、C语言知识
可以作为你后续发展需要了解的。
在论坛上、QQ上看到不少童鞋Java基础还比较欠缺,就开始搞Android了,当然就问题多多。学习热情可嘉,但需要打一个好的基础,有一个好的学习路线。
三、Android学习比较好的资料
1、应该说现在市面上的书,入门的还是不少,但一般现在只讲了简单控件的单个用法。
《Android开发范例大全》,《Android应用开发详解》可以参考。想了解游戏的话,可以参考《Android20游戏开发实战宝典》。
2、Android学习视频,也基本上停留在讲简单入门,单个控件用法为主,这方面远不及Java,J2EE,SSH的视频那么丰富。应该讲,你看完了这些,离开发还有很大一段距离。而且,这些视频在讲课方法上不如一些Java的好。现在的视频资料太丰富,从
1、看你将来想从来哪方面的开发。
2、ANROID的开发分为:
1)、Android客户端应用程序
如新浪微博、网银客户端、凡客、淘宝客户端,快盘客户端。Android在这里的应用还是界面层的东西为主。核心还在WEB。不过从应用层面上来讲,几乎大一点的网站,都需要有手机客户端程序。
2)、Android通用类程序
如基于LBS(基于位置的服务)的应用 (这类一般会嵌入到客户端应用程序中),流媒体播放应用。由于移动设备的方便便捷,这类应用有不错的前景。
3)、Android游戏开发
需要掌握的游戏引擎LGame,游戏框架等。手机上的游戏会是一大块内容,有前途。
4)、Android底层开发
需要掌握C、Linux等较底层的东西,发展方向应该是驱动、协议开发,嵌入式开发
想从事客户端应用程序的开发,要会J2EE(SSH)。(看服务器端的构架了)
Java平台一般有三个版本:Java ME(微型版,用于某些手机)、Java SE(标准版,用于台式电脑)、Java EE(企业版,用于服务器端应用)。在谈到Java时,我们通常是指Java SE,因为只有这个版本包含虚拟机和编译器。
首先,Java代码会被编译成称为字节码的中间格式。当字节码在目标电脑上运行时,虚拟机会快速将它解析成目标电脑硬件和操作系统所需要的本机格式。
除了为开发者提供“一次编写,到处运行”的优势,Java还能通过垃圾回收器(GC)实现自动内存管理,开发者可免去手动在代码中释放无用对象的内存。虽然这个功能非常有用,且大大降低了在代码中引入内存问题的风险,但是它会增加运行时的开销,因为需要不停地执行垃圾回收进程。
本文开头将比较Java SE和用于Android开发的Java之间的差异。首先我会介绍开发者习惯的Java
SE语言结构以及它们是如何在Android上运行的。其次,我会介绍如何优化Android中的Java代码,如何优化内存分配,以及如何恰当地处理多线程。
比较Android上的Dalvik Java和Java SE
虽然远在Android出现之前,开发者就能用Java编程语言为移动设备编写应用程序,但它只是Java中功能极为有限的一个版本,称为Java
ME(微型版)。不同的移动设备还需编写不同的代码,因此,写一个应用程序就能在支持Java
ME的任何手机上运行是几乎不可能的。此外,由于当时不存在很好的在线商店,应用发布过程极其复杂。
Android的问世为开发者提供了构建智能手机强大应用的机会,开发者只需用Java编程语言以及他们熟知的标准Java
API编写代码。然而,尽管Android开发者仍使用Java SE编译器来编译应用程序,你会发现,James
Gosling开发的Java和Android设备上的Java存在许多不同之处。
在Android设备上运行的VM(虚拟机)称为Dalvik。它最初由谷歌的Dan
Bornstein开发,适用于CPU和内存受限的移动设备。Java SE和Dalvik Java存在一些差异,主要体现在虚拟机上。Java
SE使用了栈机设计,而Dalvik被设计成了基于寄存器的机器。Android SDK中有一个dx工具,它会把Java
SE栈机器的字节码转换成基于寄存器的Dalvik机器字节码,该转换步骤由IDE自动完成。
基于栈的虚拟机和基于寄存器的虚拟机的定义以及差异将不列入我们的讨论范围。由于历史原因,Android使用基于寄存器的虚拟机。虽然基于寄存器的虚拟机最多可以比基于栈的虚拟机快32%,但这只限于执行时解释字节码的虚拟机(也就是说,解释型虚拟机)。在Android
22版本(也称为Froyo)之前,Dalvik虚拟机都是纯解释型的。Froyo版本引入了JIT编译器(即时编译),这是Java
SE很早就有的一个优势。
JIT编译,也称为动态翻译。它在执行前把字节码翻译成本机代码(如图1所示),这样主要有两个好处。首先,它消除了那些纯解释型虚拟机的开销;其次,它能对本机代码执行优化,这通常是静态编译代码无法做到的。例如,JIT编译器可以在它运行的CPU上选择最合适的优化,也可以根据应用程序的输入来分析代码是如何运行的,以便进行下一步的优化。
图1 Android Java和Java SE翻译步骤
虽然Android的Dalvik JIT编译器有很大的发展前景,但要达到如Java SE的JIT编译器般稳定、成熟度尚需很长一段时间。不过,Dalvik JIT的出现为Android提供了巨大的性能优势,而且它也在不断得以改善。
JAVA
SE虚拟机和Dalvik虚拟机的另一个区别是,后者进行了优化,可运行在同一个机器上的多个实例中。它在开机时会启动一个叫做zygote的进程,该进程会创建第一个Dalvik实例,由这个实例创建所有其他的实例。当应用程序启动时,zygote进程会收到一个创建新虚拟机实例的请求,并给该应用程序创建一个新进程(如图2所示)。如果开发者已习惯于Java
SE开发,这样的设计可能看起来不切实际,但它有一个很大的优势,可以避免由一个应用程序运行失败导致Dalvik虚拟机崩溃,继而引发多应用程序崩溃。
图2 在Android中启动新Dalvik虚拟机实例
Android和Java
SE除了运行的虚拟机不同之外,它们实现API的方式也不一样。Android中属于java和javax包中的API都来自Apache
Harmony(这是一个开源项目,旨在重新实现Java SE软件栈,该项目从2011年11月不再维护)。在开发方面,这些API和Java
SE包中的类似,但也存在一些差别。例如,谷歌对HttpUrlConnection类进行了Java SE版本中所没有的重大升级。
此外,Android平台移除了Java
SE中无关的API。例如,Swing/AWT包被完全移除,因为Android使用不同的UI框架。其他被移除的API还有RMI、CORBA、ImageIO和JMX。它们或者被替换为特定的Android版本(在android包空间内),或者因为一些实际原因根本不存在。
优化Android上的Java代码
经过多年的改进,Java
SE具备了一些简化编写复杂代码结构的新特性。其中的一些特性会让整个流程变得更简单,但开发者需要了解何时以及如何正确地使用它们。另外,由于Java
SE大多用于服务器端开发(使用Java企业版的API),因而开发人员专门对服务器端Java代码进行了优化。注解和Java虚拟机对脚本语言的支持就是对服务器端开发进行优化的例证。虽然这些工具在构建后端开发时很强大,但在开发Android客户端代码时,这些特性的作用很小,甚至起反作用。Java开发者已经习惯于无限量的RAM和CPU,而Android开发需要密切关注性能和内存分配。简单地说,开发者需要使用稍微不同的方法对待Android和后端的开发。
然而,随着Android的首次发布,情况有所改变。曾经一些在Android上尽量不用的Java规范重新被推荐,这主要因为Android目前的JIT编译器解决了这些规范导致的性能问题。
本文将讨论编写Android应用程序需要了解的Java代码。我们不会深究Java编程语言的细节,而是重点关注对Android开发重要的东西。不过,开发者仍需了解,大多数适用于Java SE的规则和建议同样适用于Android和Dalvik虚拟机。
Android上的类型安全枚举
Java SE 50新增了许多方便开发者的新特性。其中最值得期待的是引入了类型安全枚举。枚举在代码中用来表示属于某一组的几个选择。在早期版本的Java中,可以用多个整型常量解决这个问题。虽然这在技术上可行,但是很容易出错。请看下面的代码:
public class Machine {
public static final int STOPPED = 10;
public static final int INITIALIZING = 20;
public static final int STARTING = 30;
public static final int RUNNING = 40;
public static final int STOPPING = 50;
public static final int CRASHED = 60;
private int mState;
public Machine() {
mState = STOPPED;
}
public int getState() {
return mState;
}
public void setState(int state) {
mState = state;
}
}
问题是,虽然这些常量是期望的,但是没有机制保证setState()方法接收不同的值。如果要在设置方法中添加检查,那么一旦得到的是非预期值,开发者就需要处理错误。开发者所需要的是在编译时检查非法赋值。类型安全的枚举解决了这个问题,如下所示:
public class Machine {
public enum State {
STOPPED, INITIALIZING, STARTING, RUNNING, STOPPING, CRASHED
}
private State mState;
public Machine() {
mState = StateSTOPPED;
}
public State getState() {
return mState;
}
public void setState(State state) {
mState = state;
}
}
注意在声明不同类型安全值的地方新加的内部枚举类。这在编译时就会解决非法赋值的问题,所以代码更不容易出错。
如果Dalvik虚拟机还没有JIT编译器优化代码,不建议在Android平台上使用枚举类型,因为和使用整型常量相比,这种设计带来的内存和性能损失更大。这就是为什么在一些老版本的Android
API中还存在如此多的整型常量的原因。如今有了更强的JIT编译器以及一个不断改进的Dalvik虚拟机,开发者不必再担心这个问题,放心大胆地使用类型安全枚举即可。
然而,仍然存在一些情况使用整型常量是更好的选择。像int这样的Java基本类型,不会增加GC的开销。此外,Android SDK中许多已有的API仍然依赖基本类型,比如Handler类——在这种情况下,你没有太多的选择。
Android中增强版的for循环
Java SE 50还引入了增强版的for循环,提供了一个通用的缩写表达式来遍历集合和数组。首先,比较以下五种方法:
void loopOne(String[] names) {
int size = nameslength;
for (int i = 0; i < size; i++) {
printName(names[i]);
}
}
void loopTwo(String[] names) {
for (String name : names) {
printName(name);
}
}
void loopThree(Collection<String> names) {
for (String name : names) {
printName(name);
}
}
void loopFour(Collection<String> names) {
Iterator<String> iterator = namesiterator();
while (iteratorhasNext()) {
printName(iteratornext());
}
}
// 不要在ArrayList上使用增强版的for循环
void loopFive(ArrayList<String> names) {
int size = namessize();
for (int i = 0; i < size; i++) {
printName(namesget(i));
}
}
上面显示了四种不同遍历集合和数组的方式。前面两种有着相同的性能,所以如果只是读取元素的话,可以放心地对数组使用增强版for循环。对Collection对象来说,增强版for循环和使用迭代器遍历元素有着相同的性能。ArrayList对象应避免使用增强版for循环。
如果不仅需要遍历元素,而且需要元素的位置,就一定要使用数组或者ArrayList,因为所有其他Collection类在这些情况下会更慢。
一般情况下,如果在读取元素几乎不变的数据集时对性能要求很高,建议使用常规数组。然而,数组的大小固定,添加数据会影响性能,所以编写代码时要考虑所有因素。
队列、同步和锁
通常情况下,应用程序会在一个线程中生产数据,在另一个线程中使用它们。常见的例子是在一个线程中获取网络上的数据,在另一个线程(操作UI的主线程)中把这些数据展现给用户。这种模式称为生产者/消费者模式,在面向对象编程课程中,开发者用算法来实现该模式可能要花上几个小时。下面会介绍一些简化生产者/消费者模式实现的现成类。
1 更智能的队列
虽然已有现成的类并能用更少的代码实现该功能,但许多Java开发者仍然选择使用LinkedList以及同步块实现队列功能。开发者可在javautilconcurrent包中找到同步相关的类。此外,本包还包含信号量、锁以及对单个变量进行原子操作的类。考虑下面使用标准的LinkedList实现线程安全队列的代码。
public class ThreadSafeQueue {
private LinkedList<String> mList = new LinkedList<String>();
private final Object mLock = new Object();
public void offer(String value) {
synchronized (mLock) {
mListoffer(value);
mLocknotifyAll();
}
}
public synchronized String poll() {
synchronized (mLock) {
while (mListisEmpty()) {
try {
mLockwait();
} catch (InterruptedException e) {
//简洁起见忽略异常处理
}
}
return mListpoll();
}
}
}
虽然这段代码是正确的,并有可能在考试中得满分,但实现和测试这样一段代码只是在浪费时间。实际上,所有前面的代码可用下面一行代替。
LinkedBlockingQueue<String> blockingQueue =
new LinkedBlockingQueue<String>();
上面的一行代码能像前面的例子一样提供相同类型的阻塞队列,甚至能提供额外的线程安全操作。javautilconcurrent包含许多可选的队列以及并发映射类,所以,一般情况下,建议使用它们,而不是像之前的示例那样使用更多代码。
2 更智能的锁
Java提供的synchronized关键字允许开发者创建线程安全的方法和代码块。synchronized关键字易于使用,也很容易滥用,对性能造成负面影响。当需要区分读数据和写数据时,synchronized关键字并不是最有效的。幸好,javautilconcurrentlocks包中的工具类对这种情况提供了很好的支持。
public class ReadWriteLockDemo {
private final ReentrantReadWriteLock mLock;
private String mName;
private int mAge;
private String mAddress;
public ReadWriteLockDemo() {
mLock = new ReentrantReadWriteLock();
}
public void setPersonData(String name, int age, String address) {
ReentrantReadWriteLockWriteLock writeLock = mLockwriteLock();
try {
writeLocklock();
mName = name;
mAge = age;
mAddress = address;
} finally {
writeLockunlock();
}
}
public String getName() {
ReentrantReadWriteLockReadLock readLock = mLockreadLock();
try {
readLocklock();
return mName;
} finally {
readLockunlock();
}
}
// 重复代码不再赘述
}
上面的代码展示了在什么地方使用ReentrantReadWriteLock,它允许多个并发线程对数据进行只读访问,并确保同一时间只有一个线程写入相同的数据。
在代码中使用synchronized关键字仍然是处理锁问题的有效方法,但无论何种情况下,都要考虑ReentrantReadWriteLock是否是
工具/原料
root软件:百度root为佳!如果你已经获取了权限,可以跳过。
ksweb软件:用于搭建手机php服务器的软件。
nat123软件:强大的内网端口映射软件,不需要路由器权限。
方法/步骤
1安装手机本地php+mysql服务器环境篇 :
11安装ksweb软件,安装好ksweb后,会在手机上生成一个文件夹htdocs,其目录是mnt/sdcard/htdocs,htdocs是网站的根目录。
12安装mysql 直接点击mysql管理,点击选择“是”然后解压便可自动安装。mysql的账号密码随后再改(在设置里面更改)。
13安装好MySQL之后,我们需要对ksweb进行一些设置方可更好使用。
131端口的更改步骤:(启用root→更改80端口)手机服务器启用root,在ksweb设置里面把root打钩。
132开启手机80端口方法:把8080端口改为80端口,并把PHP服务,MySQL都打勾。其他一些设置比如MySQL密码,开机自启动等选项大家根据需要自行修改即可!
14ksweb全部设置好后,我们打开手机本地服务器地址localhost:80,表示设置好了。
我们点击页面中的“Enter KSWEB Web Interface”可以看到手机服务器的一些配置信息(默认账号密码都是“admin”),表示手机服务搭建成功,一切正常!
2利用nat123软件进行内网80端口映射篇:
21注册账号,我们先到其官网注册账号官网,大家百度nat123即可。
22登陆并添加域名解析。
221 应用名称,要搭建自己的博客,可以填XX的博客,或者XX的个人博客等。
222 内网端口,只有root的手机才填80端口。
223 内网地址这个默认localhost就行。
224 外网域名,如果没有自己的域名,可以用官方免费的二级域名,注意格式,一切填好之后,点击确认保存即可!
23 下载并安装登陆安卓版的nat123,就自动解析了。
34 接下来在另一台电脑上输入刚才的域名访问,表示安卓手机web服务器安装成功,网站搭建成功!
注意事项
另外如果需要手机网站一直都可以访问,需要下载一个永不关屏软件,这样手机就不会进入睡眠状态,服务也不会停止,不过比较耗电。
外网能访问内网手机web服务器的关键是nat123端口映射功能,利用nat123端口映射功能,不只是搭建内网网站,还可以挖掘其他的许多用途。
0条评论