02 2012 档案

摘要:一个Service是没有界面且能长时间运行于后台的应用组件.其它应用的组件可以启动一个服务运行于后台,即使用户切换到另一个应用也会继续运行.另外,一个组件可以绑定到一个service来进行交互,即使这个交互是进程间通讯也没问题.例如,一个aservice可能处理网络事物,播放音乐,执行文件I/O,或与一个内容提供者交互,所有这些都在后台进行.一个service本质上可有两种表现形式:Started 一个service在某个应用组件(比如一个activity)调用startService()时就处于"started"状态(注意,可能已经启动了).一旦运行后,service可以 阅读全文
posted @ 2012-02-29 19:54 移动应用开发 阅读(165) 评论(0) 推荐(0) 编辑
摘要:内容URI是在提供器中标识数据统一资源标识。内容的统一资源标识包括完整的提供器的符号名和所指向的一个表名。当你调用一个客户端方法来访问提供器中的一个表时,这个表的内容的统一资源标识就应该是参数之一。在前面的代码行中,常量CONTENT_URI包含了用户字典的“words”表的统一资源标识。ContentResolver对象分析出URI的授权,并且使用这个授权跟已知的系统表的授权进行比较来找到内容的提供者,然后ContentResolver对象就能够把查询参数分发给正确的提供者。ContentProvider对象是内容统一资源标识的路径部分来选择要访问的表。通常提供器对每个表都会公开一个路径。在 阅读全文
posted @ 2012-02-29 19:34 移动应用开发 阅读(185) 评论(0) 推荐(0) 编辑
摘要:应用程序使用ContentResolver客户端对象访问来自客户端的数据。这个对象有一些与提供器中相同的命名的方法,提供器是ContentProvider的一个具体的子类的实例。ContentResolver对象的方法提供了基本的“CRUD”(创建、获取、更新和删除)持久化保存的功能。在客户端应用程序的进程中的ContentResolver对象和提供器自己应用中的ContentProvider对象自动的处理进程间通信。ContentProvider对象也以表的形式在数据资源库和数据的外部表现之间扮演着抽象层的角色。注意:要访问一个提供器,通常需要在清单文件中要请求一个特殊的许可。更详细的描述请 阅读全文
posted @ 2012-02-29 19:32 移动应用开发 阅读(244) 评论(0) 推荐(0) 编辑
摘要:内容提供器管理着对数据的核心资源库的访问。并且提供器是Android应用程序的一部分,它经常为了跟数据协同工作而提供自己的UI。但是内容提供器的主要目的是提供其他应用程序使用,它们使用提供器的客户端对象访问提供器。提供器和提供器客户端一起给处理进程间通信的数据和安全数据访问提供了一个一致的、标准的接口。这个主题主要介绍以下基础内容:1.内容提供器是如何工作的;2.使用API从内容提供器中获取数据;3.使用API来插入、更新、删除内容提供器中的数据;4.与提供器协同工作的其他API功能。概述内容提供器用类似关系数据库表的形式用一个或多个表给外部应用程序呈现数据。一行代表了提供器收集的某些数据类型 阅读全文
posted @ 2012-02-29 19:31 移动应用开发 阅读(326) 评论(0) 推荐(0) 编辑
摘要:内容提供器管理结构化的数据集的访问。它们封装数据、提供定义数据安全的机制。内容提供器是用运行在另一个进程中的代码连接另一个进程中的数据的标准接口。当你想要访问内容提供器中的数据时,使用应用程序的Context中的ContentResolver对象作为客户端跟提供器进行通信。跟ContentResolver对象进行通信的提供器对象是ContentProvider实现类的一个实例。这个提供器对象接收来自客户端的请求,执行请求动作,并返回结果。如果你不想跟其他应用程序共享数据,就不需要开发自己的提供器。但是,如果你要在自己的应用程序中提供定制化的搜索建议就需要自己的提供器,如果你想要把复杂的数据或文 阅读全文
posted @ 2012-02-29 19:29 移动应用开发 阅读(240) 评论(0) 推荐(0) 编辑
摘要:当服务从所有的客户端解除绑定时,Android系统会销毁它(除非它还用onStartCommand()方法被启动了)。因此如果是纯粹的绑定类型的服务,你不需要管理服务的生命周期---Android系统会基于是否有客户端绑定了这个服务来管理它。但是,你选择实现了onStartCommand()回调方法,那么你就必须明确的终止这个服务,因为系统被认为是启动类型的。这样服务就会一直运行到服务用stopSelf()方法或其他组件调用stopService()方法来终止自己,而不管是否有还有客户端绑定了它。另外,如果你的服务是启动类型的并且也接收绑定,那么当系统调用onUnbind()方法时,如果你想要 阅读全文
posted @ 2012-02-29 19:25 移动应用开发 阅读(159) 评论(0) 推荐(0) 编辑
摘要:以下是关于绑定的重要注意事项:1. 你应该始终捕获DeadObjectException异常,当连接被中断时这个异常被抛出。这是由远程方法抛出的唯一异常。2.对象的引用计数是跨进程的。3.通常绑定和解除绑定应该成对使用,而且要跟客户端的生命周期的启动和退出时刻匹配。例如:如果你只需要在Activity可见的时候跟服务交互,那么就应该在onStart()期间绑定在onStop()期间解绑;如果你想要Activity在终止的时候也能在后台接收响应事件,那么可以在onCreate()期间绑定,在onDestroy()期间解绑。这就意味着你的Activity需要在Activity的整个生命时都要使用这 阅读全文
posted @ 2012-02-29 19:23 移动应用开发 阅读(179) 评论(0) 推荐(0) 编辑
摘要:大唐贞观年间,在长安城西的一家磨坊里有一匹瘦马和一头黑驴。它们是好朋友,经常在一起谈心。马负责为主人拉车运货,驴子的工作是在屋里推磨。贞观四年,这匹马被玄奘大师选中,接受了一项艰巨的任务,与大师一起动身去天竺国大雷音寺取三藏真经。13年后,这匹马跟着大师经历了千辛万苦,驮着佛经回到长安。大师受到重赏,而马也被人们精心打扮一番与大师形影不离,跟随大师去全国各地讲经。不久,朋友见面,老马跟驴子谈起了旅途的经历:浩瀚无边的沙漠、高入云霄的峻岭、火焰山的热浪、流沙河的黑水……驴子听了神话般的故事,大为惊异。驴子惊叹说:"马大哥,你的知识多么丰富呀!那么遥远的路程,那种神奇的景色,我连想都不敢 阅读全文
posted @ 2012-02-28 20:02 移动应用开发 阅读(163) 评论(0) 推荐(0) 编辑
摘要:(一)关于压力有一位讲师正在给学生们上课,大家都认真地听着。寂静的教室里传出一个浑厚的声音:"各位认为这杯水有多重?"说着,讲师拿起一杯水。有人说二百克,也有人说三百克。"是的,它只有二百克。那么,你们可以将这杯水端在手中多久?"讲师又问。很多人都笑了:二百克而已,拿多久又会怎么样!讲师没有笑,他接着说:"拿一分钟,各位一定觉得没问题;拿一个小时,可能觉得手酸;拿一天呢?一个星期呢?那可能得叫救护车了。"大家又笑了,不过这回是赞同的笑。讲师继续说道:"其实这杯水的重量很轻,但是你拿得越久,就觉得越沉重。这如同把压力放在身上, 阅读全文
posted @ 2012-02-28 20:00 移动应用开发 阅读(172) 评论(0) 推荐(0) 编辑
摘要:应用程序组件(客户端)通过调用bindService()方法能够绑定服务,然后Android系统会调用服务的onBind()回调方法,这个方法会返回一个跟服务端交互的IBinder对象。这个绑定是异步的,bindService()方法立即返回,并且不给客户端返回IBinder对象。要接收IBinder对象,客户端必须创建一个ServiceConnection类的实例,并且把这个实例传递给bindService()方法。ServiceConnection对象包含了一个系统调用的传递IBinder对象的回调方法。注意:只有Activity、Service、和内容提供器(content provid 阅读全文
posted @ 2012-02-28 19:55 移动应用开发 阅读(242) 评论(0) 推荐(0) 编辑
摘要:如果需要服务跟远程进程通信,那么就可以使用Messenger对象来给服务提供接口。这种技术允许你在不使用AIDL的情况下执行进程间通信(IPC)。以下是信使(Messenger)对象的使用概要:1.服务端实现的一个处理器(Handler接口),这个处理器针对每次来自客户端的调用接收一次回调;2.这个处理器被用于创建一个信使对象(Messager)(这个信使对象要引用这个处理器);3.信使对象创建一个创建一个服务端从onBind()方法中返回给客户端的IBinder对象;4.客户端使用这个IBinder对象来实例化这个信使对象(信使引用了服务端的处理器),客户端使用这个信使给服务端发送Messa 阅读全文
posted @ 2012-02-28 19:53 移动应用开发 阅读(370) 评论(0) 推荐(0) 编辑
摘要:如果你只在应用程序的局部使用服务,并且不需要跨进程工作,那么你能够实现自己的Binder类,用它直接给你的客户端提供访问服务中公共方法的能力。注意:通常,客户端和服务端只是在同一个应用和进程中工作,例如,对于一个要良好工作的播放音乐的应用程序,就需要把在后台工作的播放音乐的服务与应用自己的一个Activity绑定。以下是建立绑定类型服务的步骤:1.在服务中,使用以下方法之一创建Binder实例: A.包含客户端能够调用的公共方法; B.返回当前服务的实例,它有客户端能够调用的公共方法; C.或者返回一个带有客户端能够调用的公共方法的被服务持有的另一个类。2. 从onBind()回调方法中返回这 阅读全文
posted @ 2012-02-28 19:49 移动应用开发 阅读(287) 评论(0) 推荐(0) 编辑
摘要:创建具有绑定能力的服务时,必须提供一个IBinder对象,它用于给客户端提供与服务端进行交互的编程接口。有三种方法能够定义这个接口:1.继承Binder类如果你的服务是你的应用程序的私有服务,并且跟客户端运行在同一个进程中,那么就应该通过继承Binder类来创建你的接口,并且佛从onBind()方法中返回这个接口的一个实例。客户端接收这个Binder对象,并且能够使用这个对象直接访问Binder类中实现的或Service中的公共方法。当你的服务只是在后台给你自己的应用程序工作时,这是首选技术。不使用这种方法创建服务接口的唯一原因是因为你的服务要其他应用程序或跨进程使用。2.使用信使(Messe 阅读全文
posted @ 2012-02-28 19:45 移动应用开发 阅读(536) 评论(0) 推荐(0) 编辑
摘要:绑定类型的服务是在客户-服务接口中的服务端。绑定类型服务允许组件(如Activity)绑定服务、发送请求、接收响应、以及执行进程间通信(IPC)。一个典型的绑定类型的服务只跟它所服务的那个应用程序组件同时存在,并且不在后台无限期的运行。这份文档向你展示了如何创建绑定类型的服务,包括怎样跟其他应用程序组件绑定。但是,关于服务的基本信息你还是应该参照“Android Service”这份文档,如怎样从服务中发送通知,怎样设置服务在前台运行等等。基础绑定类型服务是Service类的一个实现,它允许其他应用程序绑定它,并跟它进行交互。要给服务提供绑定的能力,就必须要实现onBind()回调方法。这个方 阅读全文
posted @ 2012-02-28 19:43 移动应用开发 阅读(170) 评论(0) 推荐(0) 编辑
摘要:遇见他,是在一个饭局上。 一落座,他就喋喋不休地抱怨开来;怨公司不好,拼死拼活一个月,拿到手里工资没多少;怨上司不公,谁擅长拍马屁谁拿到的项目就油水丰厚;怨同事不善,成天勾心斗角明争暗斗......终于,在他暂停抱怨的间隙,我小心翼翼地问了一句;既然工作如此不称心,为什么不跳槽?他一愣,奇怪地看了我一眼,似乎在看一个外星人。"跳槽?现在经济这么不景气,往哪里跳?"这下我算明白了,原来他的工作并非一无是处啊。 散席后,尽管他热情地与我道别,并且特意留下他的电话,但我,却再未联系过他。对我来说,一个怨气冲天的人,是不值得交往的。 诚然,他的工作确实有不尽如人意得地方,但在这个世 阅读全文
posted @ 2012-02-27 19:37 移动应用开发 阅读(157) 评论(0) 推荐(0) 编辑
摘要:有一位画家,举办过十几次个人画展。开始无论参观者多少,脸上总是挂着微笑。有一次,我问他:"你为什么每天都这么开心呢?"他给我讲一件事情:小时候,我兴趣非常广泛,也很要强。画画,拉手风琴,游泳,打篮球,必须都得第一才行。这当然是不可能的。于是,我心灰意冷,学习成绩一落千丈。 父亲知道后,找来一个漏斗和一捧玉米种子。让我双手放在漏斗下面接着,然后捡起一粒种子投到漏斗里面,种子便顺着漏斗滑到了我的手里。父亲投了十几次,我的手中也就有了十几粒种子。然后,父亲一次抓起满满的一把玉米粒放在漏斗里面,玉米粒相互挤着,竟一粒也没有掉下来。父亲对我说:"这个漏斗代表你,假如你每天都 阅读全文
posted @ 2012-02-27 19:32 移动应用开发 阅读(108) 评论(0) 推荐(0) 编辑
摘要:u-boot版本为u-boot-2009.08,平台smdk2410一、第一阶段启动代码分析在学习ARM时就知道,ARM在上电复位时将PC指针修改为0,即ARM是从0地址开始读取指令执行的。在cpu/arm920t/目录下有个u-boot.lds链接脚本,首先看代码段定义:. =0x00000000;. =ALIGN(4);.text :{ cpu/arm920t/start.o (.text) *(.text)} 我们看start.o就是放在0地址处的,所以它就是我们要找的启动代码,再看程序的入口点在哪:ENTRY(_start)程序入口点是由ENTRY伪指令指定的,所以程序的入口点就是_s 阅读全文
posted @ 2012-02-26 17:31 移动应用开发 阅读(626) 评论(0) 推荐(0) 编辑
摘要:u-boot版本为u-boot-2009.08,平台为mini2440一、建立开发板支持1.修改顶层Makefile,指定交叉编译器CROSS_COMPILE ?=arm-linux-2.修改顶层Makefile,仿照smdk2410的格式在smdk2410后添加mini2440_config: unconfig @$(MKCONFIG) $(@:_config=) arm arm920t mini2440 samsung s3c24x03.在board/samsung/目录下新建目录mini2440里面内容由smdk2410复制而得,将mini2440中的smkd2410.c修改为mini2 阅读全文
posted @ 2012-02-25 17:51 移动应用开发 阅读(114) 评论(0) 推荐(0) 编辑
摘要:S3C2440支持nor flash和nand flash两种方式启动,它是通过引脚OM1和OM0控制的。如果是从nor flash启动,因为复位后,ARM将PC指针设置为0,那么nor flash肯定要连到bank0上。如果从nand flash启动,S3C2440是这样做的,nand flash控制器自动的将nand flash前4K代码复制到叫做Stepping Stone地方,因为这个地方是处于0地址的,那么我们的启动代码就需要注意了,通过这4k代码要将整个u-boot代码复制到SDRAM中,这样我们u-boot才能正常启动。 阅读全文
posted @ 2012-02-25 14:15 移动应用开发 阅读(161) 评论(0) 推荐(0) 编辑
摘要:S3C2440时钟控制逻辑可以产生FCLK、HCLK、PCLK和UCLK。FCLK为CPU时钟。HCLK为AHB总线外设时钟,包括存储控制器、中断控制器、LCD控制器、DMA控制器等。PCLK为APB总线外设时钟,包括看门狗、IIS、IIC、PWM定时器、MMC接口、ADC、UART、GPIO、RTC和SPI等等。UCLK专用于USB主机或设备接口时钟。时钟源的选择:时钟源的选择是通过OM3和OM2管脚控制的,时钟源可以是外部晶振,也可以是外部时钟。S3C2440有两个锁相环(PLL),一个用于FCLK、HCLK和PCLK的MPLL,另一个专用于UCLK的UPLL。MPLLCON和UPLLCO 阅读全文
posted @ 2012-02-19 20:29 移动应用开发 阅读(247) 评论(0) 推荐(0) 编辑
摘要:之前本想把ANDROID4的动画应用都写下来的,后来觉得自己想讲一套视频,以共编程爱好者更好的学习,但是由于时间问题一直没能如愿,前段时间录了些视频,自己感觉录制下来的效果并不理想,个人感觉自己的表达能力急需有待提高,在录制好后,自己听了遍,效果真是,那个差啊,不过没关系,我有信心把它录制好,并觉得录制一套免费的ANDROOID4完全开发视频,从底层分析到APP上线,说实话,之前一直给公司做,自己闲时抽了些时间给自己写了几个,比如说针对很多人面试难的面试宝典,还有人生宝典,个性展示等APP,处于自己设计的问题,总感觉不如人意,所以一直没上MARKET市场,哎,可能我真的还辨别不了商机与偏好的区 阅读全文
posted @ 2012-02-17 22:18 移动应用开发 阅读(278) 评论(0) 推荐(0) 编辑
摘要:重启装载器当你使用initLoader()时,如果指定ID的装载器已经存在,则它使用这个装载器.如果不存在呢,它将创建一个新的.但是有时你却是想丢弃旧的然后开始新的数据.要想丢弃旧数据,你应使用restartLoader().例如,下面这个SearchView.OnQueryTextListener的实现在用户查询发生改变时重启了装载器,装载器于是需重启从而能使用新的搜索过虑来进行一次新的查询.public boolean onQueryTextChanged(String newText) { // 当动作栏的搜索字串发生改时被调用. // 更新搜索过虑,然后重新启动装载利用... 阅读全文
posted @ 2012-02-12 08:09 移动应用开发 阅读(126) 评论(0) 推荐(0) 编辑
摘要:一个使用装载器的应用会典型的包含如下组件:一个Activity或Fragment.一个LoaderManager的实例.一个加载被ContentProvider所支持的数据的CursorLoader.或者,你可以从Loader或AsyncTaskLoader实现你自己的装载器来从其它源加载数据.一个LoaderManager.LoaderCallbacks的实现.这是你创建新的装载器以及管理你的已有装载器的引用的地方.一个显示装载器的数据的途径,例如使用一个SimpleCursorAdapter.一个数据源,比如当是用CursorLoader时,它将是一个ContentProvider.启动一 阅读全文
posted @ 2012-02-10 21:06 移动应用开发 阅读(127) 评论(0) 推荐(0) 编辑
摘要:装载器从android3.0开始引进。它使得在activity或fragment中异步加载数据变得简单。装载器具有如下特性:它们对每个Activity和Fragment都有效。他们提供了异步加载数据的能力。它们监视数据源的一将一动并在内容改变时传送新的结果。当由于配置改变而被重新创建后,它们自动重连到上一个加载器的游标,所以不必重新查询数据。装载器API概述在使用装载器时,会涉及很多类和接口们,我们在下表中对它们总结一下:Class/Interface说明LoaderManager一个抽像类,关联到一个Activity或Fragment,管理一个或多个装载器的实例。这帮助一个应用管理那些与Ac 阅读全文
posted @ 2012-02-09 07:52 移动应用开发 阅读(150) 评论(0) 推荐(0) 编辑
摘要:------------------------------------------------------------------------------------------------这几天主要是狂看源程序,在弥补了一些以前知识空白的同时,也学会了不少新的知识(比如 NIO),或者称为新技术吧。线程池就是其中之一,一提到线程,我们会想到以前《操作系统》的生产者与消费者,信号量,同步控制等等。一提到池,我们会想到数据库连接池,但是线程池又如何呢?建议:在阅读本文前,先理一理同步的知识,特别是syncronized同步关键字的用法。关于我对同步的认识,要缘于大三年的一本书,书名好像是 Ja 阅读全文
posted @ 2012-02-07 15:39 移动应用开发 阅读(201) 评论(0) 推荐(0) 编辑
摘要:此版本下载地址:http://download.csdn.net/detail/weinyzhou/4048426,只提供测试用,需要任何其他帮助,请与我联系兼容android 虚拟机1.6以上版本也可以提供其他平台的版本,欢迎联系。现已支持wince,wm,windows,android等平台,正在移植ios联系方式:QQ:514540005版权所有,未经允许不得转发。 阅读全文
posted @ 2012-02-07 09:38 移动应用开发 阅读(158) 评论(0) 推荐(0) 编辑
摘要:此版本是一个本地音视频播放器。如需要网络播放功能的可以联系。所有TC89系列wince版本的播放器都是基于硬解码,所以播放效果都很流畅。有任何需要都可以与我联系。 阅读全文
posted @ 2012-02-05 00:21 移动应用开发 阅读(209) 评论(0) 推荐(0) 编辑
摘要:线程安全 在某些情况下,你实现的方法可能会在不同的线程中调用,所以它们必须被实现成“线程安全的”。 这首先体现在可以远程调用的方法上—比如在boundservice中的方法。当在一个进程中调用同一个进程中的IBinder上所实现的方法时,这个方法会在调用者的线程中运行(IBinder不理解的看这里:http://blog.csdn.net/nkmnkm/article/details/6453218)。然而,当这个调用从另一个进程中发出时,方法会在线程池中某个被选出的线程中执行,这个线程在与IBinder相同的进程中(它不是运行于进程的界面线程中)。例如,尽管一个service的onBin.. 阅读全文
posted @ 2012-02-04 10:44 移动应用开发 阅读(178) 评论(0) 推荐(0) 编辑
摘要:Why C++ ? 王者归来29人关注此资讯, 我要关注(收藏)(?) | 新闻投递 虫虫 发布于: 2012年02月02日 (58评) 因为又有人我去Quora的C2C站去回答问题去了,这回是 关于 @laiyonghao 的这篇有点争议的博文《2012 不宜进入的三个技术点》ActionScript,Thread 和 C++, C++争议的争议最大。(要我说,.NET比C++更需要慎重进入,呵)。我就在这里回复一下这个问题吧。正好我前段时间看到一个视频,这个演讲视频还比较著名,这个演讲者是Exceptional C++ 和 C++ Coding Standards 的作者,还是ISO C+ 阅读全文
posted @ 2012-02-03 13:30 移动应用开发 阅读(153) 评论(0) 推荐(0) 编辑
摘要:AsyncTask使你可以在你的界面上执行异步工作。它在一个工作线程中执行耗时操作然后把结果传给界面线程,不需要你亲自去管理线程和句柄。要使用它,你必须从AsyncTask派生一个类并实现回调方法doInBackground(),此方法在一个后台的线程池中运行。要更新你的界面,你应实现onPostExecute(),它把doInBackground()的结果弄过来并在界面线程中运行,于是你可以安全地更新你的界面。你可以在界面线程中调用execute()来执行AsyncTask任务。例如,你可以把上一章中的例子用AsyncTask实现:public void onClick(View v) { 阅读全文
posted @ 2012-02-03 07:15 移动应用开发 阅读(131) 评论(0) 推荐(0) 编辑