android应用开发by李明
Android系统之应用开发,英蓓特培训中心 2011. 3,主要内容,Android的发展,初探Android框架,Android优秀作品,如何开发一个Android应用,应用程序实验演示和动手开发,Android是什么?,Android一词的本义指“机器人”,这里是指Google于2007年11月5日宣布的基于Linux操作系统的、可升级的、完全开源的移动系统平台,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。目前,最新版本为Android 2.4 Gingerbread和Android 3.0 Honeycomb为了推广Android ,Google和几十个手机相关企业建立了开放手机联盟(Open Handset Alliance)共同开发Android 。联盟成员包括美国摩托罗拉公司、中国台湾HTC、韩国三星电子、NVIDIA、SiRF、Skype、联发科技MTK以及中国电信在内的34家技术和无线应用的领军企业。,Android的历史和发展,2007年11月5日,34个联盟成员成立开放手机联盟.,2007年11月12日,宣布发布第一版Android SDK.,2008年8月28日,为Android平台手机提供软件分发和下载的Market正式上线.,2008年9月23日,HTC G1上市,Android SDK 1.1发布,2008年10月21日,Android被宣布开源.,2009年4月27日,Android SDK 1.5发布,至今为止,Android SDK 1.6、2.0、2.1、2.2、2.3、2.4、3.0均已发布 ,而据传SDK 3.1也正在开发中,Android系统代表手机,G1手机,Sholes手机,全球首款Android手机 采用Android SDK 1.1,摩托罗拉经典Android手机 采用Android SDK 2.0,Android平台的优势,全开放智能移动平台多硬件平台的支持 使用众多的标准化技术核心技术完整、统一完善的SDK和文档 完善的辅助开发工具,开放的平台允许任何移动终端厂商加入到Android联盟中来,为其迅速积累了人气。众多的厂商会推出千奇百怪,功能特色各具的产品,却不会影响到数据同步、甚至软件的兼容。好比你从诺基亚Symbian风格手机一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用。保证了Android手机系统可以升级,向下兼容Android应用。Android应用的开发将变的简单,大量有趣、新颖的应用吸引着消费者从而推动着Android平台的发展。,主要内容,Android的发展,初探Android框架,Android优秀作品,如何开发一个Android应用,应用程序实验演示和动手开发,Android框架,C/C+,JNI,JAVA,Android应用程序构成,Activity,Service,Broadcast Receiver,Content Provider,Intent,Activity,何谓Activity:可以简单地把Activity看成一个User Interface Program,原则上它会提供使用者一个交互式的接口功能。每一个有用户界面的应用至少包含一个Activity。一个应用可以有多个Activity,其中一个作为main Activity用于启动显示,Activity通过startActivity或startActivityForResult启动另外的Activity。所有的Activity在系统里由Activity堆栈所管理,当一个新的Activity被执行后,它将会被放置到堆栈的最顶端,并且变 成“running Activity”, 而先前的Activity原则上还是会存在于堆栈中,但它此时不会是在前景的情况,除非刚刚那个新的Activity离开。,Activity状态,当一个Activity在屏幕的最上层时(堆栈的最顶端),它就是属于running的状态。 如果一个Activity失去焦点(focus)但还看得到它的画面(比如:一个新的Activity画面并不是全屏幕或者它是一个半透明的情况),那失去焦点的这个Activity则处在paused的状态。像这个失去焦点的Activity它还是完全活着的,并没有消失。(活着的意思是指,Activity自已本身所有的状态及数据都还是存在的,也跟窗口管理程序window manager保持连系着),像这种paused的activity,会在一种情况下消失,那就是当系统的内存不够用之时,系统会自动判断,把不重要的 activity移除。 如果一个Activity被其它的Activity完全的遮住时,这个被遮的Activity处于stop的状态,它仍然保有全部的状态及数据,但因为它已不再被使用者看见,所以它的画面是被隐藏起来的(画面不需要更新),当系统内存不足时,这种stop状态的activity是最先被系统考虑拿来释放内存的。 当一个Activity处于pause或stop的状态时,系统可以要求Activity结束(finish)或直接移除(kill)它。当它需要再度呈现在使用者面前时,它必需要能完整的重新启动及回复先前的状态 。,Activity生命周期,整个生命周期 onCreate onDestroy可视周期 onStart onStop活跃周期 onResume onPause,Intent(1),一个Intent就是一次对将要执行的操作的抽象描述 Activity、Service、broadcast receiver之间的桥梁,Intent,activity,service,Broadcast receiver,Intent(2),两类intent: 显式:指定具体的目标组件处理 startActivity(new Intent(ActivityLifecycle.this, AnotherActivity.class); 隐式:由系统接受并决定如何处理 startActivity(new Intent(Intent.ACTION_DIAL);,Intent(3),在AndroidManifest.xml中定义intent-filter Filter分三类,action、category、data,framework,Component name Action Data Category,intent,component,activity,service,Broadcast receiver,实例,action - DIAL data - tel:02038639592,action - VIEW data - http:/www.google.cn,Service,没有UI,启动之后一直运行于后台,不可交互 例子:音乐播放器 与应用程序的其他模块(例如activity)一同运行于主线程中 通过startService或bindService创建Service 通过stopService或stopSelf终止Service 一般的,在activity中启动和终止service,Service生命周期,Context.stopService() Serivce.stopSelf(),Context.startService(),Context.bindService(),何为Content provider,什么是Content provider? Content Provider 是Android应用程序的四大组成部分之一 是android中的跨应用访问数据机制 为何需要content provider? Android中每一个app的资源是私有的 app通过content provider和其他app共享私有数据,19,如何使用content provider,通过content resolver访问 Context.getContentResolver(),app,ContentResolver,ContentProvider A,ContentProvider B,ContentResolver,ContentResolver,app,app,如何使用content provider(续),URI定位资源 content:/contacts/people content:/call_log 类似关系数据库的访问方式以二维数据表的格式暴露数据,缺省都包含_id字段,delete(Uri url, String where, String selectionArgs) insert(Uri url, ContentValues values) query(Uri uri, String projection, String selection, String selectionArgs, String sortOrder) update(Uri uri, ContentValues values, String where, String selectionArgs),定义自己的content provider,Broadcast receiver,接收和处理android的广播消息 Android的广播机制 系统事件例如变换时区、电量低等 应用程序发出广播消息:sendBroadCast 广播消息:intent,android,app,Broadcast receiver,Send broadcast,创建Broadcast Receiver,实现一个BroadcastReceiver public class MyAndroidReceiver extends BroadcastReceiver override onReceive(Context context, Intents Intents) 注册BroadcastReceiver 在AndroidManifest.xml文件当中进行注册在代码当中直接进行注册,IntentsFilter filter = new IntentsFilter(NEW_BROADCAST ); MyAndroidReceiver MyAndroidReceiver = new MyAndroidReceiver(); registerReceiver(MyAndroidReceiver , filter);,Broadcast receiver生命周期,Broadcast receiver对象在onReceive返回后被销毁,onReceive中不适合处理异步过程。例如弹出对话框与用户交互,可使用消息栏替代。,主要内容,Android的发展,初探Android框架,Android优秀作品,如何开发一个Android应用,应用程序实验演示和动手开发,CallACab,当你独自在外地时只需轻轻一按就可以叫来最近的出租车公司的出租汽车,可以通过地图看到最近一辆出租车的位置; 程序会自动连线到附近的出租车公司,并判断位置,派车接送。,功能,出行服务软件,GoCart,扫描商品条形码识别商品; 获取商品在网络商店和附近大型卖场的价格; 建立购买清单,并且可以通过网络与朋友们分享你喜爱的商品。,功能,实体购物与网络购物的相结合生活软件,BreadCrumbz,用实景图片来导航; 建立自己的路线; 将你的路线通过网络与朋友们一起分享旅途的快乐。,功能,图片式手机导航软件,Cooking Capsules,将视频、地图(原料购买指南)、菜谱相结合教学做菜,功能,学做菜生活教学软件,Phonebook2.0,将静态的电话本变成了一个动态的社会化网络应用,功能,传统软件的新面孔,Rayfarla,通过触摸、敲击屏幕,我们可以创作音乐; 玩音乐相关的游戏获得乐趣。,功能,音乐制作、学习软件,