(转).net开发者对android开发一周的学习体会
春节期间,相对比较闲,上班时也没什么事情做。利用这一周的时间,简单的学习了一下移动方面的开发。主要是针对android,其实我对IOS更感兴趣 (因为我用iphone),苦于暂时没有苹果电脑,只能把它放到以后学习。我的工作中暂时没有用到移动方面的开发,自己以前也一直做.net方面的应用。在这里以一个.net开发人员的思维记一下对android开发学习中的一点自己的心得和体会。初学者的胡言乱语,高手请一笑而过。
- 开发环境搭建
先下载JDK安装。对于android的SDK和eclipse,可以直接到android的网站(http://developer.android.com/sdk/index.html#download )上下载,它已经把eclipse封装好了,下载来可以直接使用,不需要配置android SDK。
对于模拟器,我推荐一个叫BlueStack的,很好很强大,比eclipse上带的AVD的速度快多了。唯一的缺点就是屏很大,好像不能调整屏的尺寸。
2. android项目结构
对于整个android项目,一般我们需要关注的是常用的两个目录和一个文件。
- src目录,所有的java代码都在这个目录下。
- res目录,所有的资源文件都在这个目录下。
- AndroidManifest.xml文件,系统的配置信息,很重要的一个文件。系统中一些功能和页面的授权都要在这里定义。有时一些功能或页面不能成功调用,可以首先去检查一下是否在该文件中授权了。
3. Activity
android中最基本的任务对象,我把它简单的理解成.net开发的窗体或页面。一个Activity上可以有多个view,所有的控件(widget)都是从view中继承来的。Activity的布局有两种方面,一种是用layout文件来实现,代码中用setContentView加载相应layout文件,相当于一个画好控件的form;而另一种是动态的用代码实现布局,好比.net中的动态生成的页面。
4. Intent
两个activity间的通信就通过intent了。我把它理解成类似asp.net中的request + response对象。Intent中可以传递一个或多个数据,多个数据的传递一般打包成一个Bundle。Intent用putExtras方法加载传递的信息。而子窗体可以用getIntent得到传过来的intent。
- 用startActivity(intent)直接打开一个不需返回值的子窗体。
- 用startActivityForResult打开一个要返回值的子窗体。子窗体中用setResult(RESULT_OK, intent)设定返回值,父窗体需要重载onActivityResult方法 得到返回信息。
- 利用intent可以调用系统功能,比如邮件,短信,电话,联系人等等。调用系统功能或窗体需要Url,比如下面是电话功能。
Uri uri = Uri.parse("tel:13800138000"); Intent it = new Intent(Intent.ACTION_DIAL, uri); startActivity(it); |
5. 资源文件(resource)
Android中的资源文件很强大,图片,描述文本,页面布局,风格等都可以放到资源文件中。在程序中用R对象可以取到各资源对应的id,这个id是系统自动产生的一个常量,你可以在gen目录下的R.java下找到相应的定义。在程序中用getResources()加R对象可以取得相应的资源。
6. GridView和ListView的使用
程序离不开数据,而一般多数据界面离不开Grid或List。Android中的这两种控件也跟.net的DataGrid和DataList类似,需要给他们一个数据源,但它们的数据源就比DataSource要复杂得多,它们的数据源是一个Adapter。通常,我们需要重写一个基于BaseAdapter的子类。GridView的项很类似.net中DataGrid的模板列,子项上可以加很多的控件。这些控件的定义的和数据绑定需要在Adapter中的getView方法中实现。
- 写一个Adapter类,Adapter所需要的数据,通常我们是用一个ArrayList传给它。而在这个类中,最主要的就是重写getView方法。每个GridView和ListView的项的表现方式就在这个方法中定义的。在这个方法里,你可以为每个项加控件,或者控件所对应的事件。
- 数据绑定。把数据源(通常为ArrayList)传给一个Adapter,GridView或ListView用setAdapter去绑定这个Adapter。
- 数据项发生了变动,用Adapter的notifyDataSetChanged方法去刷新控件。
7. SQLite
SQLite我只是简单的使用,感觉它的语法是用标准的SQL语法,但我只发现它的table功能,没有发现有类似视图和存储过程的功能。由于数据是存在你的手机上某个地方,不像SQL server等数据,我们没法事先创建一个数据库。所以通常的做法是写一个自己的DBOpenHelper,它是SQLiteOpenHelper的一个子类,我们需要重写它的onCreate和onUpgrade方法。以便第一次使用时创建自己的数据表。(在onCreate中用CREATE TABLE IF NOT EXISTS TABLE语句)。
(注:刚看到一网友的回复,SQLite 可以事先创建一个数据库,方式有点特别,很不错。它是事先准备好一个数据库文件,然后第一次运行时copy到相应的SQLite数据库所在目录。可以参考以下文章。其实同样的道理,我想开始可以准备一个XML或文本文件,程序第一次运行时把XML文件中的内容insert到新建的表中,这样是否更方便呢?更不用关心SQLite文件是放在哪个目录下的。)
http://www.akasuna.com/2012/03/09/embed-sqlite-database-in-the-apk-of-android-distributed-application/)
8. TabHost使用
Android中的tab控件很不好用。我想写一个底部多个选项,点不同选项打开不同页面的功能,很不好实现。好不容易用TabHost实现了,发现一个很大的问题就是,打开的tab页面,再跳转到另一个子页面去,底下的tab就全都不见。最后查了很多资料,说用GroupView或Fragment可以解决,Fragment我还没有学到,参考了网上一篇文章,用GroupView实现了
http://hkp.iteye.com/blog/1185482
9. PhoneGap
很强大的一个东西,号称是多平台开发架构。我用它来写了几个简单的页面,非常好实现。可以做到真正以html5 + javascript写android程序,它可以用javascript调用android API,比如调用联系人数据,电话,短信,摄像头,SQLite数据库等。特别是加上jQuery mobile,写一些基于网络数据的程序,非常简单,页面也很漂亮。但用它写的页面,我在模拟器上试了,好象有将近一秒钟的延迟,速度还是比原生程序差很多。
10. 网络数据的异步获取和文件的读写
正在学习中…
如果数据较多,几万条数据甚至更多,你那种方法插入数据时候估计太耗时了
(转).net开发者对android开发一周的学习体会的更多相关文章
- Android开发技术周报183学习记录
Android开发技术周报183学习记录 教程 Android性能优化来龙去脉总结 记录 一.性能问题常见 内存泄漏.频繁GC.耗电问题.OOM问题. 二.导致性能问题的原因 1.人为在ui线程中做了 ...
- Android开发技术周报182学习记录
Android开发技术周报182学习记录 教程 App安全二三事 记录 为什么要安全 App的移动安全主要包括下面几种: 密钥破解,导致本地加密数据被盗取. 通信密钥破解,导致接口数据被盗取. 伪造接 ...
- Android开发技术周报176学习记录
Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...
- (转).net开发者对android第二周的学习体会
这一周相对没有春节时这么闲了,白天也比较多的工作要做,每天晚上又要被我三岁的女儿折腾到十点, 实在没有多少时间学习.在前一周的基础上,这周我试着自己练习写了一个个人管理的android的程序,主要实现 ...
- Android开发----RecyclerView视图的学习
RecyclerView RecyclerView是什么? RecyclerView是如今Android开发中最常用的控件,其相较于ListView和GridView的功能更为强大,优化了两者的各种不 ...
- 给iOS开发者的Android开发建议
本人从事iOS应用开发已经5年有余,直到现在还总是刻意回避Andriod应用的开发.但是不管你信不信,安卓开发还是很有意思的,从iOS转向Android应用开发的跨度并没有你想象的那么大. 现在我把在 ...
- Android开发Fragment的使用学习
基本概念 Fragment是Android3.0(API11)提出的概念,support-v4库中也开发了一套Fragment API,最低兼容Android 1.6.所以在开发中要注意不要导错包 导 ...
- Android开发之布局的学习
FrameLayout-帧布局 实现效果: 代码: <?xml version="1.0" encoding="utf-8"?> <Frame ...
- PIE 插件式开发小笔记__PIESDK学习体会
基于PIE.NET-SDK插件式二次开发文档笔记: PIE 插件式开发配置文件: 它里面一行如下: 理解上一行'Item'关系-> library:为插件类名(程序集名称+后缀 ...
随机推荐
- out返回值的用法与用途
static void Main(string[] arr) { Console.WriteLine("请输入用户名"); string uname = Console.ReadL ...
- 状态压缩dp zoj3802
做这个题的时候看了看时间复杂度觉得应该是个贪心或者dp,然后贪心又很快被否定了,因为不具备贪心的一些特性,想了想觉得没什么思路.看了下网上的思路,真是让人拍案叫绝,算法的魅力就在于此啊.. 首先dp就 ...
- XML预定义的实体
在TSQL读取XML中一些特定的字符时出错,在XML中有些自付要用实体: 下面是五个在XML文档中预定义好的实体: < < 小于号 > > 大于号 & & 和 ...
- javascript学习教程之---如何从一个tab切换到banner幻灯片的转换2
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- Linux编程遇到的问题汇集(持续更新中)
1.源代码编译redis报告错误: undefined reference to `__sync_add_and_fetch_4' 最近项目组在实验Redis,源代码编译的时候,遇到了错误:undef ...
- C 小写字母编程大写并输出
main(){ FILE *fp; char str[100],filename[10]; int i=0;if((fp=fopen("test","w"))= ...
- XCode中使用SVN 教程
修改subversion.config方法: 可以直接在终端上输入:vi ~/.subversion/config来编辑. 也可以通过Finder搜索.subversion,点击下边的+号,进入高级搜 ...
- codeforces Ilya and Matrix
http://codeforces.com/contest/313/problem/C #include <cstdio> #include <cstring> #includ ...
- 通过JCONSOLE监控TOMCAT的JVM使用情况
这个也是要学入一下,JVMr 虚拟机原理不可少. 参考配置URL“: http://blog.163.com/kangle0925@126/blog/static/277581982011527723 ...
- KEIL中的一些细节
1.KEIL中的指针: 基于存储器的指针:数据类型 [指向存储区] *[ 指针存储区]指针变量 char xdata * px //px本身存在于自动分配的空间,一般位于data中,指向的内容位于x ...