Pro Android学习笔记(二):开发环境:基础概念、连接真实设备、生命周期
在Android学习笔记(二):安装环境中已经有相应的内容。看看何为新。这是在source网站上的Android架构图,和标准图没有区别,只是这张图颜色好看多了,录之。本笔记主要讲述Android开发环境。
一些基础概念
View。View是UI基础构建元素。View也可作为view容器,即有层次嵌套。你所看到的一切UI都是view。
Activity。Activity通常是应用的一屏,通常含有一个或多个View(虽然不是必须),顾名思义,是帮助用户处理一件事的活动。应用通常有多个activity。
Fragment。类似sub-activity。一个activity可以在屏幕上显示一个或多个fragment。
Intent。意图去做某事,它概念含义丰富,我认为学习(一)中就讲得很好,Intent是一个进程内和进程间唤醒组件的机制。它可以进行广播消息,开启服务,启动acitivity,调起系统应用(显示网页、显示联系人列表、拨打号码,接听电话等)。系统也使用intent来提醒应用有特定的事件(例如有短信)发生。
Content Provider。Android定义的一个的共享数据机制标准,支持应用内和应用间的数据共享,隐藏了具体的存储、结构和实现。
Service。后台进程。Android提供两种服务,local services只能又本应用访问,而remote service则可有设备的其他应用访问。
使用模拟器AVD
连接真实设备
Android模拟器提供了很好调测target,但是更好的方式是采用真实设备。我在Linux和Windows下都有开发环境。Windows下很简单,以三星手机为例,当你连接USB并打开开发者USB调测模式时,自动安装新硬件,则可以识别。安装后通过命令行来查看是否成功识别。
但是我一连手机到Windows,360就在叫,万一开个调测模式,不知道是否会干什么坏事,所有还是在Linux吧。Linux则要对usb进行设置。
1、在/etc/udev/rules.d/51-android.rules中增添所连接设备的说明,下面是该文件的例子。厂家ID可以在http://developer.android.com/tools/device.html#VendorIds中查询。
$ cat 51-android.rules
## HTC
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", OWNER="wei"
## Samsung
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666", OWNER="wei"
## ZTE
SUBSYSTEM=="usb", ATTR{idVendor}=="19d2", MODE="0666", OWNER="wei"
## Huawei
SUBSYSTEM=="usb", ATTR{idVendor}=="12d1", MODE="0666", OWNER="wei"
2、重新启动udev,如下。如果你手机在已打开USB调测模式的情况下一直连着电脑,建议重新插拔一下USB线。
$ sudo /etc/init.d/udev restart
3、同样可以用$adb devices命令查看连接情况
wei@wei:~/developer/adt-bundle-linux-x86-20130522/sdk/platform-tools$ ./adb devices
List of devices attached
HC27KMG00987 device
在eclipse可直接将应用部署上去。Android是为开发者设计的平台。
生命周期
Android每个应用是一个进程,有自己的虚拟机对象,确保存贮保护安全。系统通过应用优先级别的控制来决定在资源紧张时关闭哪个应用。
Android针对小屏提供了应用的无缝切换,这也导致应用生命周期管理有些复杂,例如你从应用A切换到应用B,需要保存A的数据,当从应用B返回应用A时,用户可以继续原有的操作。这实际是关于多进程如何在资源有限的手机上的运作机制。推荐复习Android学习笔记(三三):Activity生命周期。
状态虽然多,但也很好记忆。要区分的是可视和可互动状态。如果前面可能有弹框,有通知等情况,遮挡了activity的部分,activity不能互动,但仍处于可视状态。也就是activity处于前台,但可能不是最top那个,不一定能与用户互动。一般来讲,只需处理onCreate( )、onResume( )和onPause( )这几个方法即可,不很准确地描述着三个分别表示开始,激活状态,非激活状态。
当应用中任何一个activity启动时,就可以获得app的context。
调测
LogCat是最常用的调测工具,通过Window -> Show View -> Other... -> Android -> LogCat设置。LogCat打印调测信息,有Log.e,Log.w,Log.i,Log.d,Log.w共5个级别,可以设置不同的tag,在大型项目进行log过滤,非常有用,在编写小程序时,也尽量养成好习惯。在LogCat窗口,也可以显示System.out.println( )。
ERROR, WARN, INFO, DEBUG, VERBOSE是Log的5个级别,顾名思义,优先级别从高低。由于log也是需要消耗系统资源的,因此一般verbose只用在开发过程,不应被编译到在最后发布的应用中。Debug会编译进应用,但不运行,除非设备处于debug调测状态。Error、warn和info则保持运行。要善于使用这几个级别。
Wei :在Android Reference这样写道:Verbose should never be compiled into an application except during development. Debug logs are compiled in but stripped at runtime. Error, warning and info logs are always kept. 我的理解是Android能根据等级,针对资源优化进行处理,verbose不会编译到发布的apk中,而debug可以编译进去,但是只有在phone处于调测模式下才运行,一般运行情况下不会执行。而error,warn,debug作为正常log信息在普通运行状态下也会处理。但从网上的资料看,Log.v和Log.d在实际情况与这描述不同,并作为bug进行上报。安全起见,verbose应该在正式发布之前人工去掉(加个开关等多种方式,继承Log类等等),而对于debug,可以通过if(BuildConfig.Debug) Log.d(…)来进行处理。BuildConfig是自动生成的文件,与R.java类似,可用于:if(BuildConfig.Debug) { 写入只在DEBUG模式下运行的代码}。这要求ADT v17或以上版本。
相关链接: 我的Android开发相关文章