春节期间,相对比较闲,上班时也没什么事情做。利用这一周的时间,简单的学习了一下移动方面的开发。主要是针对android,其实我对IOS更感兴趣 (因为我用iphone),苦于暂时没有苹果电脑,只能把它放到以后学习。我的工作中暂时没有用到移动方面的开发,自己以前也一直做.net方面的应用。在这里以一个.net开发人员的思维记一下对android开发学习中的一点自己的心得和体会。初学者的胡言乱语,高手请一笑而过。

  1. 开发环境搭建

先下载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. 网络数据的异步获取和文件的读写

正在学习中…

评论列表
 

#1楼 2013-02-19 17:11 walkline 

用PhoneGap开发的web app 速度慢

#2楼 2013-02-19 17:13 IT小崽 

不错。。很强大!我还没去弄Android呢。前些日子弄了下Window Phone的开发

#4楼[楼主] 2013-02-20 08:30 飞不动 

@李小超
引用你错了,SQLite 可以事先创建一个数据库

http://www.akasuna.com/2012/03/09/embed-sqlite-database-in-the-apk-of-android-distributed-application/

学习了,很不错的资料。谢谢!

#5楼 2013-02-20 08:47 李小超 

SQLite文件所放的目录名,其实就是 【/data/data/{app包名}/databases/】,是固定死的,明显预先准备好包含数据的数据库方便啊。

如果数据较多,几万条数据甚至更多,你那种方法插入数据时候估计太耗时了

(转).net开发者对android开发一周的学习体会的更多相关文章

  1. Android开发技术周报183学习记录

    Android开发技术周报183学习记录 教程 Android性能优化来龙去脉总结 记录 一.性能问题常见 内存泄漏.频繁GC.耗电问题.OOM问题. 二.导致性能问题的原因 1.人为在ui线程中做了 ...

  2. Android开发技术周报182学习记录

    Android开发技术周报182学习记录 教程 App安全二三事 记录 为什么要安全 App的移动安全主要包括下面几种: 密钥破解,导致本地加密数据被盗取. 通信密钥破解,导致接口数据被盗取. 伪造接 ...

  3. Android开发技术周报176学习记录

    Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...

  4. (转).net开发者对android第二周的学习体会

    这一周相对没有春节时这么闲了,白天也比较多的工作要做,每天晚上又要被我三岁的女儿折腾到十点, 实在没有多少时间学习.在前一周的基础上,这周我试着自己练习写了一个个人管理的android的程序,主要实现 ...

  5. Android开发----RecyclerView视图的学习

    RecyclerView RecyclerView是什么? RecyclerView是如今Android开发中最常用的控件,其相较于ListView和GridView的功能更为强大,优化了两者的各种不 ...

  6. 给iOS开发者的Android开发建议

    本人从事iOS应用开发已经5年有余,直到现在还总是刻意回避Andriod应用的开发.但是不管你信不信,安卓开发还是很有意思的,从iOS转向Android应用开发的跨度并没有你想象的那么大. 现在我把在 ...

  7. Android开发Fragment的使用学习

    基本概念 Fragment是Android3.0(API11)提出的概念,support-v4库中也开发了一套Fragment API,最低兼容Android 1.6.所以在开发中要注意不要导错包 导 ...

  8. Android开发之布局的学习

    FrameLayout-帧布局 实现效果: 代码: <?xml version="1.0" encoding="utf-8"?> <Frame ...

  9. PIE 插件式开发小笔记__PIESDK学习体会

    基于PIE.NET-SDK插件式二次开发文档笔记:  PIE 插件式开发配置文件: 它里面一行如下:      理解上一行'Item'关系->    library:为插件类名(程序集名称+后缀 ...

随机推荐

  1. Code First研究学习2_基本的错误及解决方法

    使用Code First时总有很多的问题出现,以下列举了一些基本的错误及解决方法! 1.当用Enable-Migrations启动数据库迁移后,如果再继续输入Enable-Migrations命令,则 ...

  2. MySQL sql 执行步骤

    基本步骤是  1.from  2.join on  3.where  4.group by  5.having  6.order by  7.select  8.distinct ,sum,...  ...

  3. ubuntu 安装RPM软件包

    red hat 系统用rpm格式的文件安装软件,ubuntu安装软件是用deb格式的文件安装 在ubuntu上安装rmp文件格式的软件包步骤: 1.安装转换软件 alien(需要联网) apt-get ...

  4. ISO3834认证所需的部分标准

    SO9606-1 焊工考试——熔化焊——第一部分:钢 ISO9606-2 焊工考试——熔化焊——第二部分:铝及铝合金 ISO14732 焊接人员——金属材料全机械化及自动化焊接的熔化焊操作攻击电阻焊安 ...

  5. 《图解CSS3》——笔记(一)

    作者:大漠 勘误:http://www.w3cplus.com/book-comment.html 2014年7月14日14:46:35 第一章  揭开CSS3的面纱 1.1  什么是CSS3 CSS ...

  6. 关于uC/OS的简单学习(转)

    1.微内核 与Linux的首要区别是,它是一个微内核,内核所实现的功能非常简单,主要包括: 一些通用函数,如TaskCreate(),OSMutexPend(),OSQPost()等. 中断处理函数, ...

  7. Spark学习笔记--概念知识

    RDD被视为由不同的数据块组成,对于RDD的存取是以数据块为单位的,本质上分区(partition)和数据块(block)是等价的,只是看待的角度不同. 数据块 Spark存储管理模块中所管理的几种主 ...

  8. FLASH驱动之-块设备驱动系统构架

    一.  块设备是只能以块为单位进行访问的设备,块的大小一般是512个字节的整数倍,常见的块设备包括硬件,SD卡,光盘,flash等.驱动程序是块的整数倍从设备读写得到数据.块设备的最小访单位为块,不同 ...

  9. 格式化用jad反编译混淆过的代码,能去大部分错误 (zhuanzai)

    http://blog.csdn.net/chruan/article/details/8484783

  10. 绝美Sysinternals

    啥也不说了,自己看吧: https://technet.microsoft.com/en-us/sysinternals/bb545046 新地址: https://technet.microsoft ...