• 1. Android基础简介 姓名:戈亚光
  • 2. 目录 了解Android Hello World 应用程序组件 Activity Service Content Provider
  • 3. 一.了解Android1.Android的版本历史 Ice Cream Sandwich 冰淇淋三明治 4.0
  • 4. 基于Linux开放性内核的操作系统 Google公司在2007年11月5日公布的手机操作系统。 2011年,成为最受欢迎的智能手机操作系统。 以Java为编程语言。 智能手机 平板电脑Android 简介
  • 5. 一.了解Android3.Android架构 Android是一个包含操作系统,中间件和关键应用的软件堆栈。 Android SDK提供了在Android平台上使用Java编程语言开发应用的必须的工具和API。
  • 6. 一.了解Android3.Android架构— Linux内核 Android依赖Linux2.6内核提供的核心服务,包括安全﹑内存管理﹑进程管理﹑驱动模型等; 内核也是硬件和软件堆栈的其余部分之间的抽象层。
  • 7. 一.了解Android 3.Android架构—系统库 包含一组C/C++库供系统各个组成部分使用; 开发者通过应用程序框架层使用这部分功能;
  • 8. 一.了解Android3.Android架构—Android运行时 核心库—为JAVA语言的核心库提供功能; DVM — 每一个Android应用程序都拥有一个Dalvik虚拟机实例,每个应用程序都运行在一个单独的Linux进程中;DVM执行的不是Java字节码,而是由字节码转换的dex文件;
  • 9. 一.了解Android3.Android架构—Android应用程序框架 应用程序框架是我们进行Android开发的基础,大部分情况下我们都是和它打交道;
  • 10. 一.了解Android3.Android架构—Android应用程序 Android附带了一些核心的应用程序Email客户端、SMS 、日历 、地图 、浏览器 、联系人 等;所有这些都是使用JAVA语言编写的 ;
  • 11. 目录 了解Android Hello World 应用程序组件 Activity Service Content Provider
  • 12. 二.Hello World1.创建Hello world 如右图所示新建一个Android 工程; IDE会自动生成Android工程 的配置文件,资源文件, Activity文件等; 点击运行,一个Hello world 程序就完成;
  • 13. 二.Hello World2.源文件目录结构
  • 14. 二.Hello World3.APK文件结构
  • 15. 二.Hello World5.Android编译步骤 Android Asset Packaging Tool负 责编译资源文件和生产R.java文件; AIDL工具负责将aidl文件转换为 JAVA接口文件; 所有的JAVA文件,包括R.java和 aidl都会被java编译器编译成class 文件; DEX工具会把所有的class文件和第 三方类库的class文件转换成dex文 件;
  • 16. 二.Hello World5.Android编译步骤 未被编译的资源文件(如图片), 编译后的资源文件,dex文件会被 apkbuilder打包成APK文件; 所有的APK文件,必须进行签名然 后才能安装到手机或者模拟器上; 最后如果你是以Rlease模式签名的 话,就必须使用zipalign工具进行优 化,这样的话会大幅降低应用程序 在运行过程中对内存的消耗;
  • 17. 目录 了解Android Hello World 应用程序组件 Activity Service Content Provider
  • 18. 三.应用程序组件1.四大组件 应用程序组件是Android应用程序的基础,每个组件都是系统进入你应用的一个不同入口。每个组件都在你构建项目的过程中扮演者独特的功能。四大组件分别为: Activity Service Broadcast Receiver Content Provider
  • 19. 三.应用程序组件2.四大组件之 -- Activity Activity代表用户界面中的一个屏幕。比如,一个Email客户端会用一个Activity显示所有的新邮件,用另一个Activity来阅读邮件。 尽管这些Activity协同完成一个顺畅的用户体验,但是他们彼此却是独立的。正因为如此,另一个应用可以启动其他应用的Activity。比如一个Camera的应用可以启动Email客户端撰写邮件的Activity来分享他捕捉到的图片。 Android系统会管理所有的Activity,初始化Activity,销毁Activity等;我们要做的只是在正确的时间做正确的事情。
  • 20. 三.应用程序组件3.四大组件之 -- Service Service是在后台运行长时间操作或者执行远程进程工作的一种组件。Service并不提供用户界面。 例如,一个Service可以在用户使用另一个应用时在后台播放音乐;或者在不阻塞用户与Activity交互的前提下,完成从网络上抓取数据。 其他的组件,比如Activity可以启动或者停止Service,也可以通过Bind方式来和Service交互。
  • 21. 三.应用程序组件4.四大组件之 -- BroadcastReceiver BroadcastReceiver是响应系统全局广播的一个组件。由系统发起的广播有很多,比如,屏幕已关闭,电池电量低等。 应用程序也可以自定义广播,比如,定义一个告诉其他应用程序数据已下载完毕并可以被使用的广播。 尽管BroadcastReceiver不提供用户界面的显示,但它可以通过状态栏通知也告诉用户某个事件发生了。但是更常见的应用场景是, BroadcastReceiver只是系统其它组件的gateway(出入口),他本身要做的事情很少。比如,用户打开了网络,某个网络下载的Service需要启动。
  • 22. 三.应用程序组件5.四大组件之 -- ContentProvider ContentProvider负责管理应用的共享数据。这些数据你可能存储在文件中、SQLite数据库中、WEB上、或者你可以访问到的任何位置。通过ContentProvider,其他的应用程序就可以查询或者修改这些数据(ContentProvider 允许的前提下)。 例如,Android系统提供了管理用户联系人信息的ContentProvider。因此,其他的应用只要是拥有正确的权限都可以通过该ContentProvider读取或者修改某个联系人信息。 ContentProvider对应用的私有数据也是比较有用的。他可以封装变化,对外提供统一接口,有点像DAO层。
  • 23. 三.应用程序组件6.系统组件的纽带 -- Intent 在系统组件中Activity,Service,BroadcaseReceiver是被一个叫Intent异步消息激活的。Intent将独立的组件联系起来,不管这些组件是不是属于一个应用程序。 startActivity ()或者startActivityForResult ()方法来启动一个Activity。 startService方法用来启动一个Service。bindService()方法用来绑定一个Service。 sendBroadcast() 来启动一个BroadcaseReceiver。
  • 24. 三.应用程序组件7. Android系统特性 Android应用没有一个单一的入口(比如说,没有main()函数); Android中任何一个应用都能启动其他应用的组件。比如,如果你想要用户使用摄像头照一张照片,这个功能另一个应用能实现,你的应用就可以使用它,而不必由你自己再开发一个捕捉照片的activity。对用户来说,照相机好像就是你应用的一部分。 退出应用不等于进程被销毁。当应用的某个或某些组件需要执行时,Android将启动此应用的进程;当系统必须为了其他应用恢复内存时,进程被停止。
  • 25. 目录 了解Android Hello World 应用程序组件 Activity Service Content Provider
  • 26. 四.ACTIVITY1. Activity简介 Activity是应用程序的重要组成部分,他提供一个用户可以操作的界面。 一个应用可能有多个独立的Activity组成。一般情况下有一个Activity被指定为“Main Activity”,当用户第一次启动该应用的时候它会被呈现给用户。 每个Activity都可以启动其他的Activity来执行不同的动作。每当一个新的Activity启动的时候,当前的Activity就被停止,但是系统会把这个Activity保存在后退栈(Back Stack)中。
  • 27. 四.ACTIVITY1. Activity简介 当一个新的Activity启动的时候他会被Push到Back Stack中并获取用户的焦点。Back Stack遵循“先进后出”的机制,所以当用户在在新的Activity上做完操作,点击返回键的时候,该Activity会被Pop出栈(并且被销毁),然后上一个Activity就被恢复(Resume)。 Activity有多个回调的方法,以此来表示其状态的转变,比如创建(onCreate),恢复(onResume)等。这些回调方法提供给你一个在正确时间做正确事情的机会。比如在Activity停止的时候释放一些大的对象(网络连接,数据库连接等)。状态间的切换回伴随着Activity的整个生命周期。
  • 28. 四.ACTIVITY2. Activity的使用 创建一个继承自Activity的子类。 在该子类中,实现回调方法。 其中有两个比较重要的回调方法: onCreate() -- 初始化;通过setContentView()定义用 户界面; onPause() -- 在该方法中保存用户的修改; 实现一个用户界面。通常是定义一个布局文件,然后通过 setContentView()设置到Activity中。
  • 29. 四.ACTIVITY2. Activity的使用 在配置文件中声明Activity。只有声明后的Activity对系统来说才是可访问的。 启动Activity 。通过调用startActivity(Intent intent)启动一个应用自己或者另一个应用的Activity。 启动应用内的Activity(显示的Intent):
  • 30. 四.ACTIVITY2. Activity的使用 启动其他应用的Activity(隐式的Intent): 启动Activity并获取结果: startActivityForResult (Intent intent, int requestCode) onActivityResult(int requestCode, int resultCode, Intent data) 和 setResult (int resultCode, Intent data) 关闭Activity。
  • 31. 四.ACTIVITY3. Activity的生命周期 通过实现回调方法来管理Activity的生命周期是开发一个灵活和健壮应用的关键。 Activity存在着三种基本状态: Resumed(运行):屏幕最前端并有焦点 Paused(暂停):不在最前端但是可见,可杀 Stopped(停止):不可见,可杀 当Activity处于暂停或者停止状态的时候,系统有可能为了回收内存而干掉他。系统有可能调用他的finish方法,有可能直接杀死其所在进程。 通过以下两个图详细解释其生命周期内的状态变化和回调函数的作用:
  • 32. 四.ACTIVITY3. Activity的生命周期
  • 33. 四.ACTIVITY3. Activity的生命周期
  • 34. 四.ACTIVITY4. 任务和后退栈 任务是响应用户执行特定操作的Activity的集合。这些Activity依各自的启动顺序被保存在一个栈中(Back Stack)。
  • 35. 四.ACTIVITY4. 任务和后退栈 Activity和Back Stack的默认特性: Activity A启动Activity B后,Activity A就会被停止,但系统仍然会保留他的状态(比如滚动条的位置等),此时如果点击回退键,Activity A会被恢复(连同其状态)。 用户点击Home key后,当前的Activity会被停止,且该任务被放置到后台,但是系统会保留所有Activity的状态。当用户重启该任务时,任务会被拉回到前台运行,并重启栈顶的Activity。 当用户点击Back key时,当前的Activity会被销毁并出栈。之前的Activity会被重启。 Activity可以被初始化多次。
  • 36. 目录 了解Android Hello World 应用程序组件 Activity Service Content Provider
  • 37. 五.Service1. Service简介 Service是一个没有用户界面,可以在后台长时间运行的一个系统组件。 Service以下面两种方式运行: Started 当其他的组件通过startService()方法启动服务时,该服务就是Started状态。该状态Service会一直运行直到调用stopService()或者stopSelf(),且不会有返回值返回给调用者。 Bound 当其他的组件通过bindService()方法启动服务时,该服务就是Bound状态。 Bound的服务提供了客户端-服务器接口,允许组件和服务交互,发送请求,接收结果,甚至通过进程间通信(IPC)跨进程的执行这些操作。多个组件可以同时绑定一个服务,但是当所有组件解除绑定时,服务会被自动销毁。
  • 38. 五.Service2. Service的使用 创建一个继承Service类或者其子类的服务类。 覆盖父类中的回调接口。 onCreate() onStartCommand() onBind() onUnbind() onDestroy() 创建好的Service通过startService()或者bindService()方法启动。 通过stopService()方法停止一个服务。 在配置文件中声明该Service。
  • 39. 五.Service3. Service的生命周期
  • 40. 五.Service3. Bound Services 实现绑定的服务就要提供一个Ibinder接口,通过该接口调用端就可以和该服务进行交互。有三种途径可以定义该接口; 继承Binder类 通常情况下你的Service和你的调用者是运行在一个进程中的,在这种情况下你就可以通过继承Binder类来创建Ibinder接口。通过该接口调用端就可以直接的访问Binder中和Service中的方法。 使用Messenger 如果调用端和Service不在同一个进程中的话,你就需要使用Messenger来创建Ibinder接口。这种简单的IPC是把消息(请求)放在一个队列中然后在单线程中执行,所以是线程安全的。
  • 41. 五.Service3. Bound Services 使用AIDL AIDL(Android Interface Definition Language),可以使你的Service既支持跨进程调用,又满足多线程调用。
  • 42. 五.ContentProvider1.创建ContentProvider ContentProvider是数据在不同应用程序间共享的唯一方法,且为唯一一个不使用Intent来激活的系统组件。创建ContentProvider的步骤为: 继承ContentProvider类 通过一个ContentProvider的子类,你可以向其他的使用者暴露数据,使用端通过ContentResolver提供的接口可以对这些数据增删改查。定义ContentProvider类就是实现以下六个方法: query()  insert()  update()  delete()  getType()  onCreate()
  • 43. 五.ContentProvider1.创建ContentProvider 在配置文件中声明ContentProvider类
  • 44. 五.ContentProvider2.使用ContentProvider 你的程序不需要直接调用ContentProvider而是通过Content Resolver和ContentProvider交互。 增加记录
  • 45. 五.ContentProvider2.使用ContentProvider 修改记录 删除记录 查询记录
  • 46. 谢谢!