(转).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:为插件类名(程序集名称+后缀 ...
随机推荐
- HDU 5141
这个题 LIS + 并查集的思想 + 链式前向星 要求找s(i,j)使i j 能有最长的LIS ... 做法是枚举每一个j 即终点 算 起点 的可能 无力吐槽了 bc 的时候写错了一个地方 ...
- [Unity优化] Unity CPU性能优化
前段时间本人转战unity手游,由于作者(Chwen)之前参与端游开发,有些端游的经验可以直接移植到手游,比如项目框架架构.代码设计.部分性能分析,而对于移动终端而言,CPU.内存.显卡甚至电池等硬件 ...
- Extjs 兼容IE10
在对应的地方将Ext.isIE 修改成: Ext.isIE && !(/msie 9/.test(navigator.userAgent.toLowerCase()) &&a ...
- 原生app,WEBAPP,混合app
什么叫做原生App? 原生App是专门针对某一类移动设备而生的,它们都是被直接安装到设备里,而用户一般也是通过网络商店或者卖场来获取例如 The App Store 与 Android Ap ...
- 二维指针*(void **)的研究(uC/OS-II案例) 《转载》
uC/OS-II内存管理函数内最难理解的部分就是二维指针,本文以图文并茂的方式对二维指针进行了详细分析与讲解.看完本文,相信对C里面指针的概念又会有进一步的认识. 一.OSMemCreate( ) 函 ...
- ubuntu 终端只显示当前目录名称
修改.bashrc文件: 原来: #修改终端提示颜色 color_prompt=yes if [ "$color_prompt" = yes ]; then PS1='${debi ...
- 单元测试之C/C++
如今TDD很火,我公司小,一般写代码不写测试用例的,一般就是随便测试下函数的输入输出,没用工具或框架来测试,非常简单,一点也不正规化. 在一种传统的结构化编程语言中,比如C,要进行测试的单元一般是函数 ...
- Json帮助类以及如何使用
首先要添加引用System.Runtime.Serialization. public class JSONHelper { public static string Serialize<T&g ...
- sgu495:概率dp / 推公式
概率题..可以dp也可以推公式 抽象出来的题目大意: 有 n个小球,有放回的取m次 问 被取出来过的小球的个数的期望 dp维护两个状态 第 i 次取出的是 没有被取出来过的小球的 概率dp[i] 和 ...
- 【剑指offer】面试题39扩展:平衡二叉树
题目: 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 思路: 直观的思路是,判断根结点的左子树.右子树高度差是否小于1. 为避免多次访问同一结点,应该用后序遍历的方式访问. 注意:加号优先级高于条件 ...