要创建一个Activity,必须要创建一个Activity的子类(或者Activity的现有子类),在这个子类中要实现Activity声明周期中的回调函数,系统会在生命周期发生变化时调用相应的回调方法,如:Activity开始创建,停止,恢复,或销毁。其中最重要的两个回调方法是: onCreate() 该方法必须实现。系统会在Activity创建是调用该方法。在方法的实现中,应该用来初始化Activity重要内容。最重要的是在这里必须调用setContentView()来定义Activity用户界面的布局。 onPause() 系统调用此方法说明用户离开了当前Activity(并不一定意味着Activity已经被销毁)。通常在这里需要将当前会话内容持久化保存(因为用户可能不再返回当前Activity)。 还有其它几个生命周期的回调方法,是关于用户在不同的Activity中切换或Activity停止,销毁的。剩下所有的生命周期再以后再做讨论,在有关声明周期管理的章节。 实现一个用户界面 一个Activity用户界面由View类提供的层次视图对象实现。每个View控制特定矩形空间中的窗口响应用户的交互。比如:一个View可以是一个按钮,当用户点击按钮时出发一个动作。 Android提供了一些现成的View,可以用来设计和组织布局。“Widgets(控件)”是View提供的在屏幕可见的互动元素,如:按钮,文本框,复选框或只是一个图片。“Layouts(布局)”是ViewGroup类派生的一个对象,提供一种布局。例如:线型布局,网格布局或相对布局。也可以通过继承View或ViewGroup来生成自己的布局或控件对象,应用于Activity。 最常见的方式是在项目的资源文件中创建布局的XML描述文件。这样可以独立设计界面,然后在Activity源码中定义行为。可以在Activity中通过setContentView()和布局的资源ID来设置界面布局。当然,也可以在Activity中通过代码创建一个Views,放入ViewGroup中,然后通过最后一个ViewGroup来setContentView()。 有关创建用户界面的信息,请参阅用户界面文档。 声明一个Activity的清单(manifest) 声明一个Acivity必须要要把它加入系统中的清单文件中,打开清单文件,在<application>中添加一个<activity>标签。例如: <manifest … > <application … > <activity android:name=”.ExampleActivity” /> … </application … > … </manifest > 可以在activity元素中添加属性,如:activity的标签,图标或UI主题。android:name是唯一必须的属性,它指明了这个activity对应的类。一旦应用已经发布,将不能去修改这个属性,这有可能破坏一些功能,例如一个快捷方式。 关于activity元素在清单文件中的更多信息,请参阅<activity>说明文档。 使用意图过滤器 <activity>元素可以使用<intent-filter>元素来声明其它程序组件如何来激活它。 当使用Android SDK创建一个新的应用时,将自动创建一个包含“launcher(启动)”意图过滤器的“主”activity,看起来就像这样: <activity android:name=”.ExampleActivity” android:icon=”@drawable/app_icon”> <intent-filter> <action android:name=”android.intent.action.MAIN” /> <category android:name=”android.intent.category.LAUNCHER” /> [...]
Activity是一个应用组件,用于让用户通过屏幕交互实现拨打电话,拍照,收发邮件或浏览地图等功能。每一个Activity提供一个窗口绘制用户界面。窗口通常满屏显示,不过有可能小于屏幕或在浮动时小于下面窗口。 一个应用通常由多个相互松散绑定的Activity组成。其中某个Activity会被指定为“主”Activity,首次打开应用时会首先显示这个“主”Activity。每当一个新的Activity启动时,系统会停止上一个Activity,并将其对应的活动保存在堆栈(back stack)中。堆栈(back stack)将保证“后进先出”原则,这样当用户在当前Activity按下“后退”按钮时,堆栈(back stack)将弹出(并从堆栈中销毁)上一个Activity,恢复以前的活动。 当一个Activity因为另一个新Activity启动被停止,被停止的Activity可以通过生命周期回调方法(lifecycle callback methods)得知这个状态的变更。一个Activity可以接受以下几种状态变化的回调方法:系统创建、停止、恢复、销毁,可以通过这些回调方法进行相应适当的处理,如:停止时,释放占用的资源,关闭数据库连接。恢复时,重新获取必要的资源同时恢复中断的行动。以上这些状态变化是Activity生命周期的一部分。 接下来将讨论如何创建和使用Activity,包括一个完整的Activity生命周期是如何工作的,是你可以妥善管理Activity各个状态的变化。
目前,互联网行业正在朝着移动互联网方向强劲地发展,而移动互联网的发展离不开背后的移动平台的支撑。众所周知,如今在移动平台市场上,苹果的iOS、谷歌的Android和微软的Windows Phone系统已经形成了三足鼎立的形势,而Android系统的市场占有率是最高的。Android系统之所以能够在市场上占据着第一的位置,一来是因为它依托着谷歌的品德效应和技术实力,二来是因为它是开放的,任何人都可以得到它的源代码,并且能够自由地使用它。既然Android系统是开放的,作为一个移动平台开发人员来说,当然希望能够深入地去分析和研究它的源代码了,然而,Android系统的源代码非常庞大,我们需要循序渐进地去学习。 工欲善其事,必先利其器。为了全面、深入地理解Android系统的源代码,在正式进入Android系统源代码的世界前,我们手头上需要准备好一些参考资料以及实验环境,此外,还需要了解Android系统的架构知识。 参考资料 Android系统的源代码非常庞大和复杂,我们不能贸然进入,否则很容易在里面迷入方向,进而失去研究它的信心。我们应该在分析它的源代码之前学习好一些理论知识,下面就介绍一些与Android系统相关的资料。 我们知道,Android系统是基于Linux内核来开发的,在分析它在运行时库层的源代码时,我们会经常碰到诸如管道(pipe)、套接字(socket)和虚拟文件系统(VFS)等知识。此外,Android系统还在Linux内核中增加了一些专用的驱动程序,例如用于日志系统的Logger驱动程序、用于进程间通信的Binder驱动程序和用于辅助内存管理的匿名共享内存Ashmem驱动程序。在分析这些Android专用驱动程序的时候,也会碰到Linux内核中与进程、内存管理相关的数据结构。因此,我们有必要掌握一些Linux内核的基础知识,下面就介绍四本典经的Linux内核书籍。 Linux Kernel Development. 这本书的作者是Robert Love,目前最新的版本是第3版。这本书对Linux内核的设计和实现提供了一个总览视图,从概念上对Linux内核的各个子系统的设计目标和实现思路进行了清晰的描述,非常适合初学者阅读。如果从软件工程的角度来看,这本书就相当于是Linux内核的概要设计文档。 Understanding the Linux Kernel. 这本书的作者是Daniel P. Bovet和Marco Cesati,目前最新的版本是第3版。这本书对Linux内核的实现提供了更多的细节,详细地描述了内核开发中用到的重要数据结构、算法以及编程技巧,非常适合中高级读者阅读。如果从软件工程的角度来看,这本书就相当于是Linux内核的详细设计文档。 Linux Device Drivers. 这本书的作者是Jonathan Corbet, Alessandro Rubini和Greg Kroah-Hartman,目前最新的版本是第3版。这本书更加注重实际操作,它详细地讲解了Linux内核驱动程序的实现原理和实现方法,读者可以跟着它来实际地编写出自己的Linux驱动程序。阅读了这本书之后,对我们后续去分析Android的专用驱动程序是有非常大的帮助的。 Linux内核源代码情景分析 这本书的作者是毛德操和胡希明,是中国人自己编写的一本经典的Linux内核书籍。这本书最大的特点是从使用情景出发,对Linux内核的源代码作了详细的分析,帮助读者把枯燥无味的源代码给理顺了。 掌握了Linux内核的基础知识之后,还不宜马上就去分析Android系统的源代码,因为这样做是漫无目的的,我们应该带着问题或者目标去分析Android系统的源代码。要把问题或者目标挖掘出来,最好的方法就莫过于是在Android平台上编写自己的应用程序了。通过编写应用程序,我们可以知道Android平台都提供了哪些功能,进而我们就会想去了解这些功能是怎么实现的,这样就可以达到带着问题或者目标去分析Android系统的源代码了。这里介绍两个Android应用程序开发教程的书籍: Professional Android 2 Application Development. Google Android SDK开发范例大全. 这两本书都使用了大量的例子来说明如何使用Android SDK来开发Android应用程序。读者可以根据实际情况来练习一下,主要掌握Android应用程序四大组件(Activity、Service、Broadcast Receiver和Content Provider)的用法,因为Android系统的整个架构和实现就是为了向开发者提供这四大组件来实现各种各样的应用程序的。在学习的过程中,如果遇到其它问题,还可以参考官方文档,其网址为:http://developer.android.com/index.html 环境搭建 开发Android应用程序可以在两种环境下进行,一是在Android SDK环境下进行,一般是集成在Eclipse里面进行开发,二是在Android源代码工程环境下进行,在这种环境进行开发的好处是可以使用一些在SDK中不公开的接口。但是如果我们要修改Android系统的源代码,或者为Android系统增加新的功能接口,那么就只能在Android源代码工程环境下进行了。由于我们的目的是对Android系统源代码进行分析,因此,我们在开发Android应用程序时,也在Android源代码环境下进行。这样,我们就需要搭建一套Android源代码工程环境了。 目前,Android源代码工程环境只能在Linux平台上使用,而Linux系统的发行版本比较多,这里我们推荐Ubuntu系统。Ubuntu系统是免费的,而且非常易于使用,安装和更新应用程序也非常方便,它的官方下载地址为:http://www.ubuntu.com/ 安装好Ubuntu系统之后,我们就可以在上面下载、编译和安装Android源代码了,具体方法和步骤可以参考下面这篇文章:在Ubuntu上下载、编译和安装Android最新源代码 Android系统的源代码工程默认是不包含Linux内核源代码的,如果我们需要修改Android系统的内核或者在里面增加新的模块,那么就要把Android内核源代码一起下载、编译和安装了,具体方法和步骤可以参考下面这篇文章:在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel) Android源代码工程环境搭建好了之后,我们就可以在里面开发新的应用程序或者修改系统代码了。增加了新的应用程序或者修改了系统的代码之后,不需要重新编译整个源代码工程,只要单独编译有改动的模块就可以了,具体方法可以参考下面这篇文章:如何单独编译Android源代码中的模块 对于已经开发好的应用程序或者系统功能,如果想把当作Demo展示给客户来体验时,我们既可以在真机上面运行,也可以在模拟器(Android源代码工程环境或者Android SDK环境都集成了模拟器)上面运行。当我们手头上没有真机,而且我们又不想把整个Android源代码工程环境或者Android SDK环境带去展示我们的Demo时,就可以考虑把模拟器这两个环境中独立出来了,具体方法可以参考下面这篇文章:制作可独立分发的Android模拟器 系统架构 Android系统是按层次、分模块来设计的。在我们着手对Android系统的源代码进行分析前,需要对Android系统的架构有一个总体的认识,这样我们就能够快速地知道哪些代码位于哪个层次上的哪个模块中,节省搜索代码的时间,把更多的精力投入在源代码的分析上去。 [...]
什么是4G? 它是下一代移动通信技术 即使你对迅猛发展的手机不太了解,你仍然有可能听过4G的提法。随着在巴塞罗纳举办的 2011年全球移动通信大会,你将在接下来的时间里看到更多关于4G的东东。 作为手机的下一代技术,4G标志着更快的速度和更大范围的覆盖,但同时它也带来了互相竞争的各种标准和互不统一市场称谓——没有一个标准的4G 技术。无线运营商和手机制造商纷纷抢占制高点,试图证明他们的4G技术是最好的。一个又一个4G手机在全球移动通信大会上发布。 我们已经按照首写字母的顺序将关于4G技术的问题总结为一系列快速问题。如果你有更多的问题,请告诉我们,并且关注我们整整一周对全球移动通信大会的报道。1. 4G是什么?我为什么要知道?理论上,4G是移动通信的第四代技术,是第三代技术3G的延续。在实际应用中,4G是一个代表未来科技或者是为了更好的市场推广的一种说法。大部分宣传自己是4G的其实只能是3.5G或者是3.75G,但是这些在未来都将升级为4G。 4G技术包含了两层意思。一个是移动数据的传输速度要快得多——10倍于现在3G的速度。而且他能够解决使偏远地区的人们获取服务这一重大问题(它曾经限制了更多的居民获取无线通信服务)。4G标准的数据能够更快的传输,而且覆盖更多的人群。2.到底有多少不同的4G技术?他们各自的优势是什么?目前,宣传的4G其实只是后期的3G技术。被国际电信联盟认证为真正的4G技术是: LTE Advanced WiMAX Release 2 他们在目前的市场上都不常见,但是他们的前辈—— LTE和 WiMAX是可以见到和使用的。 正如那些无线通信公司宣传的一样,4G包含了三种不同的技术。 HSPA+ ——这个最像是标准3G技术的一次更新。利用同样的基础设施,它可以提供更快的速度。HSPA+是在2008年投入市场应用,现在全世界能经常使用到它。德国电信公司在美国的所谓4G技术就是HSPA+。同样的,美国电话电报公司首次展示的4G技术也包括 HSPA+。 LTE—— LTE似乎正在成为全球的4G标准,但是它被大多数人认为是4G。 威瑞森通讯, MetroPCS 和美国电话电报公司都应用了这个技术。很多欧洲运营商也承认LTE。 LTE Advanced 便于升级,一旦时机成熟,将LTE手机升级成完全的4G 手机就比较简便。 威瑞森通讯 早在2010年的12月就开始部署LTE网络,美国电报电话公司宣布他们将在2011年的下半年开始4G LTE技术的应用,他同时还有一个HSPA+ 网络,这能作为LTE的后备力量。这两个公司都期望LTE能在2013年年底前获得大范围应用。 WiMAX—— 这是Sprint, Nextel 和 Clearwire在美国本土使用的技术,在加拿大也是主流技术。 Sprint公司的4G网络包含了 Clearwire公司的4G数据网和自己的3G语音网。 3. 什么时候4G技术开始大范围应用呢?我现在就应该买一部4G 手机吗?如果你现在使用的网络是LTE或者是WiMAX,这在将来都可以升级为4G。HSPA+现在就能使用,而且是4G技术的前奏。WiMAX和LTE的优势在于更容易升级为4G标准,而HSPA+的优势在于他现在的覆盖面很广,这是LTE至少在三年时间里都无法赶超的。虽然它不是4G,但是它速度够快而且正适合这个技术过渡期。 LTE——这个有着4G标准的通信技术,现在仍然没有开始大范围布局。 威瑞森通讯准备在接下来的18月内加倍投资LTE,但是要在三年之后才能全面铺开。 Sprint公司所谓的4G网络已经覆盖美国29个州而且还在扩张。 德国电信公司跟其他对手相比只拥有一个较小的3G网络,但是正在快速布局 HSPA+。美国电话电报公司则是双管齐下的办法,现在主要使用HSPA+ ,而在2011年的下半年将开始推出LTE。 威瑞森通讯 在2011年国际消费电子展上发布了最新的4G技术产品。我们应该很快就能在市场上见到。美国电话电报公司已经发出应用HSPA+的设备了,现在已经有很多智能手机能够支持HSPA+了,包括iPhone 4。 在全球移动通信大会上,期望能看到更多的制造商和运营商的4G手机。 如果你想现在就买一个4G手机, Sprint 公司是美国境内最好的选择。然而,我们对他的 WiMAX 技术战略表示担心,现在倒还好。随着越来越多的4G设备的出现,我们跟通信商的合同也会延续下去。4. 这会跟当年VHS和Betamax关于录像标准争斗的情况一样吗?其中一种技术会最终退出市场?是的,但幸运的是大多数无线通信公司现在都支持一个标准:LTE。 它被看作是现在正广泛应用的3G技术UMTS的自然进化。 美国手机用户对于CDMA和GSM之间的斗争颇为熟悉。 威瑞森通讯和 Sprint使用CDMA技术,而世界上其他的厂商则使用GSM。所以除非客户购买了一个双卡的通用手机,否则,就不能在海外使用。 但是这两个公司已经决定为他们各自的4G网络应用LET技术。LTE已经在世界范围内赢得广泛接受。所以一旦LTE网络得以广泛应用,制造商就不用为同一个手机制造两个不同的版本了(就像 [...]
尽可能减少HTTP请求次数 使用CDN 避免空src和href标签 加入Expires或Cache-Control Header 使用Gzip压缩 在html文件顶部放置样式表 在html文件底部放置JavaScript脚本 避免使用CSS表达式 使用外部JavaScript和CSS外部文件 减少使用DNS查找次数 精简JavaScript和CSS 避免重定向 移除重复的脚本 配置ETag 缓存AJAX 使用GET完成AJAX请求 减少DOM元素数量 避免404 减少Cookie大小 使用无Cookie的域 避免使用滤镜 不要在HTML中缩放图片 使用小favicon.ico文件,并让其可缓存
每到岁末年初,我们总会对过去的一年进行一番总结,然后再展望未来一年的前景,但是你有没有试过更长远的,比如说想想一百多年后会是什么样子?1990年12月,也就是即将进入二十世纪的时候,美国平民工程师John Elfreth Watkins在女性杂志《家庭妇女周刊》(Ladies’ Home Journal)上撰写了一篇文章“What May Happen in the Next Hundred Years”,预言了一百年后的世界将会是个什么样子,涵盖了不同领域的多达29个话题。 虽然都是咨询了一些“最伟大的科学与教育机构”之后才做出的,但是他也同时承认:“这些预言可能会看起来很奇怪,甚至完全不可能。” 一个多世纪过去了,《家庭妇女周刊》姊妹杂志《星期六晚邮报》(Saturday Evening Post)的历史频道编辑Jeff Nilsson重新翻出了Watkins当年的预言,和现实对比看看哪些实现了,哪些完全离谱,顿时在网上掀起了热议。 【十个已经实现的预言】 1、数字彩色摄影 “照片传输可以跨越任意距离。如果一百年后中国发生了一场战争,这种最惊人时间的快照一小时后就会出现在报纸上……照片能够复制任何自然色彩。” 虽然没有使用数字一词,Watkins依然成功预见了如今的摄影技术,这可是非常惊人的。要知道,他所在的年代里,要是中国出了什么事儿,西方报纸得到一周后才会贴出照片。另外,“跨越任意距离”正是互联网的成就。 2、美国人增高 “美国人的身高将会增加1-2英寸。” 1990年美国男性平均身高66-67英寸(1.68-1.70米),2000年增至69英寸(1.7米)。如今,美国男性平均身高69.5英寸(1.76米),女性则是64英寸(1.63米)。 3、手机 “无线电话和电报将会遍布全世界。丈夫在大西洋中部能够和芝加哥家中的妻子聊天。打电话到中国就像从纽约联系布鲁克林那样简单。” 那个年头可没有跨国电话,事实上贝尔15年后才发明了电话,而且仅仅连通了美国东西海岸。无线通话的想法也确实是革命性的。 4、快餐 “类似今天面包店的地方就可以买到预先做好的快餐。” 超市、便利店、麦当劳、肯德基证明了Watkins的远见,不过他当时设想的是用盘子给客户送快餐,然后回收清洗——多环保。 5、人口增长变缓 “美国人口可能会有3.5-5.0亿。” 数字差别较大,但至少方向是对的。如果美国人口保持十八世纪的增长率,2000年会超过10亿,但实际上只增加了360%,二十世纪初为2.8亿,现在才超过3亿。 6、温室蔬菜 “强力电灯沐浴着蔬菜,就像日光那样加速它们的成长。土壤里的电流会让重要植物生长得更快、更大,并杀死有问题的种子。彩色射线能加速大量植物的成长。电流能让种子迅速发芽、成熟。” 现在的蔬菜水果确实能在极短的时间内成熟出来,只可惜有时候太过分了。彩色射线和土壤电流没有成真,但或许正在试验也说不定。 7、电视 “人们能够看到整个世界。各种各样的人和事物都被收录到电子摄像机中,并跨越数千英里,展现在另一端的屏幕上。” 国际直播、网络视频都实现了Watkins的梦想。 8、坦克 “车轮上的巨大城堡会以超越如今火车的速度在开放空间内纵横驰骋。” 达芬奇就预言过坦克,但是Watkins想得更远。 9、更大的水果 “我们的曾曾孙能够吃上和苹果一样大的草莓。” 生物工程改变了很多水果的样子,不过Watkins对草莓有点儿太乐观了。 10、高速列车 “火车通常能每分钟跑2英里(3.2公里)。快速列车时速可达150英里(240公里)。” 写下这句话后整整一百年,甚至月份都不差,美国全国铁路客运公司(Amtrak)的旗舰线路Acela Express在波士顿和华盛顿特区间开通,最高时速150英里,只是平均时速没这么高。 【四个没能实现的预言】 1、C、X、Q三个字母消失 “字母表中不会再出现C、X、Q。它们没什么必要,将被抛弃。” 这个有点儿离谱,但是也涉及到了大规模通信可能造成的影响。 2、每人每天都会步行10英里(16公里) 这是对人性的高度前瞻,但太高估我们的锻炼能力了,忘了懒惰是人的本性,也没有想到交通会如此便利。 [...]
首先先添加EPEL的yum源。 安装CentOS对应版本: rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-6.noarch.rpm rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/i386/epel-release-6-6.noarch.rpm 其它版本的CentOS可以在这里找到:http://mirrors.ustc.edu.cn/fedora/epel/ 然后就可以直接通过yum安装了: yum install couchdb Happy ending.
转载自cnbeta 什么是验证码 ”验证码“( CAPTCHA )其实并不是各位网友总是在不同网站上看到的难以辨认的字母组合的代名词,而是“全自动区分计算机和人类的图灵测试”的俗称,顾名思义,它的作用是区分计算机和人类。 在 CAPTCHA 测试中,作为服务器的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答 CAPTCHA 的问题,所以回答出问题的用户就可以被认为是人类。 CAPTCHA 是由计算机来考人类,而不是标准图灵测试中那样由人类来考计算机,因此人们有时称 CAPTCHA 是一种反向图灵测试。 验证码是否真的保护了计算机系统 一队来自斯坦福大学的研究人员 PALO ALTO 指出很多验证码完全没有发挥应有的作用。这些研究人员甚至设计了一个通用程序,这个程序能够以极高的成功率识别出许多网站上的验证码,包括 Visa 旗下网站 Authorize.net ,暴雪官方网站, eBay ,以及维基百科。 这种识别技术用到了机器人视觉领域的一种概念模型,它有助于机器人不受图像噪点的干扰正确识别物体的外形。斯坦福这个名为 Decaptcha 的工具使用上述指导思想编写的算法能够将扭曲变形且充满噪点的图片分割成可以通过光学识别技术( OCR )辨别的字母和数字。 ”大多数验证码投入使用之前都没有经过必需的验证,也缺少可靠性测试。“ 来自斯坦福大学安全实验室的研究人员 Elie Bursztein 博士后说:”我希望我们的研究能够让人们更为慎重的对待验证码的设计和使用。“ Decaptcha 能够成功识别 66% Visa 支付网站 Authorize.net 上的验证码图片,并可以顺利攻陷暴雪娱乐网站上 70% 的验证码。而维基百科有四分之一的验证码可以辨识,在 CNET 以及 Digg.com 上这个数字降低到了五分之一。百度的验证码虽然仅有 5% 的辨识率,但是在测试过程中同样的验证码出现的频率竟高达 98% ,非常容易被攻击者用穷举法攻破。来自斯坦福的这个研究团队随后指出,任何可辨识率超过 1% 的验证码系统都不应该被继续使用下去。 各大网站的验证码识别率: 随后暴雪发表声明说,他们明确的知道验证码技术并不具有足够高的安全性。”我们仅在初级安全层使用验证码技术抵挡一些特定的攻击,比如注册环节。我们使用一些更为安全可靠的技术来保护我们的客户与骨干服务器。“来自暴雪的 [...]