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开发相关文章

转自http://blog.csdn.net/flowingflying/article/details/9055809

【转】Pro Android学习笔记(二):开发环境:基础概念、连接真实设备、生命周期的更多相关文章

  1. Android学习笔记1——开发环境配置

    一.JDK配置 Android是基于Java进行开发的,首先需要在电脑上配置JDK(Java Development Kit).在http://www.androiddevtools.cn/下载对应系 ...

  2. 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式

    可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...

  3. 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter

    目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...

  4. 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...

  5. 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果

    目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...

  6. 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge

    目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...

  7. 【转】Pro Android学习笔记(二五):用户界面和控制(13):LinearLayout和TableLayout

    目录(?)[-] 布局Layout 线性布局LinearLayout 表格布局TableLayout 布局Layout Layout是容器,用于对所包含的view进行布局.layout是view的子类 ...

  8. 【转】Pro Android学习笔记(三十):Menu(1):了解Menu

    目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...

  9. 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET

    目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...

  10. 【转】 Pro Android学习笔记(五五):调试和分析(3):adb命令、模拟器控制台和StrictMode

    目录(?)[-] adb命令 模拟器Console StrictMode adb命令 我们在学习SQLite的使用,介绍过部分adb命令的使用,见Pro Android学习笔记(五):了解Conten ...

随机推荐

  1. IPv4地址(二)网络划分

    在IPv4地址(一)中提到过,IP地址可以分成两部分,前面一部分是网络号,而后面一部分是主机号. 这里网络可以通过主机数量规模不同而分为3类:大型网络.中型网络和小型网络. 不同网络的特点 大型网络— ...

  2. redis写磁盘报错Cannot allocate memory

    查看 Redis 日志发现系统在频繁报错: [1821] 10 Nov 09:59:04.086 # Can't save in background: fork: Cannot allocate m ...

  3. Redis单台的安装部署及集群部署

    Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(diff ...

  4. 8148之更换摄像头出现异常---REISZER OVERFLOW OCCURED: RESTARTING

    my iss config as: rsz_reg->SRC_VSZ  = 1079;//715;    rsz_reg->SRC_HSZ  = 1919;//1277; rszA_reg ...

  5. Can a GridView have a footer and header just like ListView?

    Aquick question: In ListView I use this code: list.addHeaderView(headerView); How to deal with it wh ...

  6. TP框架---thinkphp模型

    1.获取系统常量信息的方法:在控制器DengLuController里面下写入下面的方法,然后调用该方法. public function test() { //echo "这是测试的&qu ...

  7. GS与数据库打交道

    GS与数据库打交道 link_stat stat = (link_stat)rPkt.size; if (stat == link_stat::link_connected) { GameChanne ...

  8. 【BZOJ3630】[JLOI2014]镜面通道 几何+最小割

    [BZOJ3630][JLOI2014]镜面通道 Description 在一个二维平面上,有一个镜面通道,由镜面AC,BD组成,AC,BD长度相等,且都平行于x轴,B位于(0,0).通道中有n个外表 ...

  9. protect,internal的区别

    protected: 爷爷有一张银行卡,爸爸可以用,儿子也可以用,隔壁老王不可以用(因为老王跟爷爷没有继承关系) internal: 王总有一张银行卡,秘书可以用,经理可以用,王总儿子不可以用(因为银 ...

  10. php验证身份证号码有效性

    <?php // 18位身份证校验码有效性检查 // idcard_checksum18('...'); function idcard_checksum18($idcard) { if (st ...