版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章第五章AndroidAndroid后台处理后台处理天津大学仁爱学院天津大学仁爱学院 信息工程系信息工程系 2移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理消息提示消息提示5.1本章主要内容本章主要内容ServiceService组件组件5.2BroadcastReceiverBroadcastReceiver组件组件5.3AndroidAndroid后台线程后台线程5.4AndroidAndroid应用开发步骤应用开发步骤5.5 3移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理 Android系统提供一套友好的消息提示机制,不会
2、打断用户当前的操作。l常用的方式uToastp一种快速的即时消息。p消息内容简短。p悬浮于应用程序的最上方。p不获得焦点。uNotificationp消息内容显示于手机的状态栏中。p按住状态栏往下拉,可以查看系统的提示消息。5.1 消息提示消息提示 4移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理 Toast对象lToast类在android.widget包下。lToast对象的创建通过makeText()方法实现。lToast对象通过show()方法显示在屏幕上。lToast对象一般用于某项操作执行后是否成功的消息提示。v【例】添加Toast对象:当删除一条日志
3、操作时给出提示。5.1 消息提示消息提示 5移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理 创建Notification对象lNotification类在android.app包下。lNotification无须Activity,将消息内容显示在手机状态条中。l创建Notification对象:u方法一:Notification mynotification=new Notification(icon,ticker,when);其中:picon是显示在状态栏中的图标,一般通过资源id表示。pticker是消息的文本内容。pwhen是系统时间,一般可用System.
4、currentTimeMillis()获得。u方法二:Notification mynotification=new Notification();mynotification.icon=R.drawable.header;mynotification.tickerText=getResources().getString(R.string.notification);5.1 消息提示消息提示 6移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理 Notification包含如下功能:l创建新的状态栏图标;l在扩展的状态条窗口显示额外的信息(也可以启动另一个Inten
5、t);l其它提示形式:闪烁/LED,让手机震动,发出声音(铃声,媒体库歌曲)等。u设置Notification对象缺省表现形式:pNotification.DEFAULT_VIBRATE:Notification显示时伴随振动。pNotification.DEFAULT_SOUND:Notification显示时伴随音乐。pNotification.DEFAULT_ALL:Notification显示时伴随振动和音乐。p例: mynotification.defaults= Notification.DEFAULT_SOUND;u模拟器不支持震动。5.1 消息提示消息提示 7移动终端应用开发移
6、动终端应用开发第五章第五章 Android后台处理后台处理 由Notification启动另一活动l设置点击状态栏中的Notification时发送的Intent对象。u例如,当点击状态栏的Notification时启动另一个活动,该活动名为NotifiedActivity。代码如下:Intent i = new Intent(this, NotifiedActivity.class);PendingIntent pi = PendingIntent.getActivity(this, 0, i, 0);uPendingIntent: PendingIntent就是一个Intent的描述,相当
7、于对intent执行了包装,我们不一定一定要马上执行它,我们将其包装后,传递给其他activity或application。l点击状态栏中的Notification启动另一个活动。代码如下:myNotification.setLatestEventInfo(this, 示例, 点击查看, pi);lsetLatestEventInfo :设置显示在拉伸状态栏中的Notification对象的属性,单击后将发送PendingIntent对象。5.1 消息提示消息提示 8移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理 NotificationManagerl所有的No
8、tification 都由NotificationManager来管理,通过NotificationManager 显示出来。u例:NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);notificationManager.notify(0, myNotification);/发送NotificationlNotificationManager常用方法方法描述cancel(int id)取消以前显示的一个NotificationcancelAl
9、l() 取消以前显示的一个所有NotificationgetSystemService(NOTIFICATION_SERVICE)初始化一个NotificationManager对象notify(int id, Notification notification)把Notification持久地发送到状态条上5.1 消息提示消息提示 9移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理 使用Notification和NotificationManager的基本步骤:l 获取NotificationManager对象。l 创建一个Notification对象。l 设置N
10、otification的各个属性:u设置在状态条(Status Bar)显示的通知文本提示u设置发出提示音u设置手机振动u设置LED灯闪烁u设置对通知的单击事件处理l 发送通知。5.1 消息提示消息提示 10移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理v Servicel Service是后台运行的,没有用户交互界面的“服务”。如:u播放音乐;u检测SD卡上文件的变化;u后台数据计算,如记录用户的地理信息位置的改变;u发出Notification。l Service一般由Activity启动,但不依赖于Activity 。也可以由其他的Service或者Broa
11、dcast Receiver启动。l Service的生命周期uService的生命周期方法比Activity要少一 些,只在:ponCreate()ponStart()ponDestroy()5.2 Service组件组件 11移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理v Service的启动方式:l 通过startService启动u启动时,依次调用onCreate-onStart方法。u注意:如果Service已经启动了,当我们再次启动Service时,不会再执行onCreate()方法,而是直接执行onStart方法。uAndroid2.0以后用onS
12、tartCommand替换了之前的onStart,启动时会自动调用该Service的onStartCommand方法。u停止时直接进入onDestroy。u无论之前调用了几次startService, 一次stopService调用,将结束该Service。l 通过bindService启动u启动时只运行onCreate方法。u停止时,依次调用onUnbind-onDestroy方法。5.2 Service组件组件 12移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理v Service的进程优先级l 如果service正在调用onCreate()、onStart()
13、或onDestory()方法,那么用于当前service的进程则变为前台进程以避免被killed。l 如果service已经被启动,拥有它的进程仅比可见的进程低,而比不可见的进程重要,这就意味着service一般不会被killed.l 如果客户端已经连接到service ,那么拥有它的进程则拥有最高的优先级,可以认为该service是可见的。l 如果service可以使用startForeground(int, Notification)方法来将service设置为前台状态,那么系统就认为是对用户可见的,并不会在内存不足时killed。5.2 Service组件组件 13移动终端应用开发移动终
14、端应用开发第五章第五章 Android后台处理后台处理v 创建Service子类需要重写的方法l onBind(Intent intent)u该方法是必须实现的方法,返回一个绑定的接口给Service。l onCreate()u该方法是当Service第一次被创建时,由系统调用。l onStart(Intent intent, int startId)u该方法是当startService()方法启动Service时,该方法被调用。l onDestroy()u该方法是当Service不再使用时,由系统调用。v 注册Service组件l 在应用程序中使用Service,需要在AndroiManif
15、est.xml文件中显式地注册标签。5.2 Service组件组件 14移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理v启动和停止Servicel启动Serviceu显式启动。通过类名称,例如:Intent myIntent=new Intent(this, MyService.class);myIntent.putExtra(“TOPPING”,”Margherita”);startService(myIntent);u隐式启动。通过Intent Filter,例如: startService(new Intent(this, MyService.class);
16、l停止Serviceu使用stopSelf()方法u使用stopService()方法,例如: stopService(new Intent(this, MyService.class);5.2 Service组件组件 15移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理 BroadcastReceiverlBroadcastReceiver是对广播消息进行过滤并响应的控件。lBroadcastReceiver类位于android.content包下。l实现自己的BroadcastReceiver必须要注册。注册方式:u动态注册:在Java代码中注册。(灵活)u静态
17、注册:在AndroidManifest.xml中声明。(常用)l开发与BroadcastReceiver相关的程序,主要的工作是对onReceive()方法进行重写。l注意:在onReceive()中执行的代码耗时不要超过5秒。5.3 BroadcastReceiver组件组件 16移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理 发送广播的方式l用sendBroadcast和sendStickyBroadcast发送广播:u所有满足条件的BroadcastReceiver都会执行其onReceive()方法来处理响应,是对广播消息进行过滤并响应的控件。u当有多个满
18、足条件的BroadcastReceiver时,不能保证其onReceive()方法的执行顺序。l用sendOrderBroadcast发送:u通过sendOrderBroadcast发送的Intent,会根据BroadcastReceiver注册时IntentFilter设置的优先级顺序来执行onReceive()方法。u对于相同优先级的BroadcastReceiver,不能保证其onReceive()方法的执行顺序。lsendStickyBroadcast 与其它发送方式的不同之处:uIntent在发送之后一直存在,并且在以后调用registerReceive注册相匹配的Receive时会
19、把这个Intent直接返回给新注册的Receive。5.3 BroadcastReceiver组件组件 17移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理5.3 BroadcastReceiver组件组件 接收广播服务的过程l开发BroadcastReveiver类的子类,在其中重载onReceive()方法;l在AndroidManifest.xml中注册BroadcastReceiver对象;u动态注册:通过调用registerReceiver()方法来注册。代码如: MyReceiver receiver=new MyReceiver(); /创建相关对象
20、IntentFilter filter=new IntentFilter(); filter.addAction(DATE_CHANGED); registerReceiver(receiver, filter); /动态注册BroadcastReceiver u静态注册:在AndroidManifest.xml中添加声明: 18移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理 接收广播服务的过程l两种注册方式比较:u动态注册方式特点:在代码中进行注册后,当应用程序关闭后,就不再进行监听。u静态注册方式的特点:在应用程序安装之后,无论该应用程序是否处于活动状态,Br
21、oadcastReceiver始终处于被监听状态。l在AndroidManifest.xml中为应用程序添加适当的权限; l等待接收广播。u我们注册的BroadcastReceiver并非一直在后台运行,一旦当事件或相关的Intent传来,就会被系统调用,处理onReceive()方法里的响应事件。5.3 BroadcastReceiver组件组件 19移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理v 【例】Service与BroadcastReceiver联合应用l 功能:u通过按钮启动Service,Service运行两分钟后停止,或通过点击“停止Servic
22、e”按钮中止Service;u动态注册一个BroadcastReceiver;u通过BroadcastReceiver广播Service运行的时间。u注意:在AndroidManifest.xml中需要注册Service组件:5.3 BroadcastReceiver组件组件 20移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理v 线程是比进程更小的执行单位。v 主线程l 当一个程序首次启动时,Android会启动一个LINUX进程和一个主线程。l 主线程负责处理与UI相关的事件,并把相关的事件分发到对应的组件进行处理。所以主线程通常又被叫做UI线程。lAndroi
23、d UI操作必须在UI线程中执行。lAndroid的UI是单线程(Single-threaded)的。v 子线程l非UI线程即为子线程,子线程一般都是后台线程。l运用子线程的场合:u进行数据、系统等其他非UI的操作。u把所有运行慢的、耗时的操作移出主线程,放到子线程中。5.4 Android后台线程后台线程 21移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理v Handler消息传递机制l Android的子线程不能直接操作UI。如果需要可以尝试使用Handler消息传递机制。l Handler消息传递机制:u一个Handler对应一个Activity。u自定义的
24、后台线程可与Handler通信,Handler将与UI线程一起工作。l Handler类位于android.os包下。l Handler的常用方法方法返回类型描述handlerMessage(Message msg)void子类对象通过该方法接收消息sendEmptyMessage(int what)boolean发送一个只含有what值的消息sendMessage(Message msg)boolean发送消息到HandlerhasMessages(int what)boolean监测消息队列中是否还有what值的消息Post(Runnable r)boolean将一个线程添加到消息队列中5
25、.4 Android后台线程后台线程 22移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理v Handler的使用l 开发Handler类的步骤:u 在Activity或Activity的Widget中开发Handler类的对象,重载handlerMessage方法。u 在新启动的线程中调用sendEmptyMessage或sendMessage方法向Handler发送消息。u Handler类的对象用handlerMessage方法接收消息,然后根据消息的执行相应的操作。5.4 Android后台线程后台线程 23移动终端应用开发移动终端应用开发第五章第五章 An
26、droid后台处理后台处理v AsyncTaskl AsyncTask是抽象类,位于android.os包下。l AsyncTask是一种简单的实现后台运行事务的方式。l 利用AsyncTask我们不需要自己来写后台线程,无需终结后台线程。有效地避免了使用Handler带来的麻烦。l AsyncTask的特点是任务在主线程之外运行,而通过回调方法在主线程中执行。l 子类必须实现抽象方法doInBackground(Params p) ,这个方法是必须要重写的,用来在后台线程中处理一些耗费时间的事情。 l AsyncTask的执行分为若干步骤,每一步都对应一个回调方法,这些方法需要重写。注意:在
27、任务的执行过程中,这些方法不由应用程序调用,而是被自动调用的。5.4 Android后台线程后台线程 24移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理v AsyncTask的常用方法l AsyncTask定义了三种范式类型,被用于一个异步任务。uParams:当执行时,参数类型发送到任务,比如HTTP请求的URL。uProgress:在后台计算期间,后台任务执行的百分比。uResult:后台计算的结果类型,比如String。v AsyncTask常用的需要重载的方法:方法描述onPreExecute()当任务执行之前开始调用此方法,可以在这里显示进度对话框doI
28、nBackground(Params)此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress)来更新任务的进度onProgressUpdate(Progress)此方法在主线程执行,用于显示任务执行的进度onPostExecute(Result)此方法在主线程执行,任务执行的结果作为此方法的参数返回5.4 Android后台线程后台线程 25移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理v AsyncTask使用步骤l 一个AsyncTask运行的过程中,经历了4个步骤:u onPreExe
29、cute() 在execute调用后立即在ui线程中执行。这步通常被用于设置任务。u doInBackground(Params.) 当onPreExecute() 执行完成后,立即在后台线程中运行。这步被用于执行较长时间的后台计算。异步任务的参数也被传到这步。计算的结果必须在这步返回,将传回到上一步。在执行过程中可以调用publishProgress(Progress.)来更新任务的进度。u onProgressUpdate(Progress.) 在调用publishProgress后,在UI线程中运行。执行的时机是不确定的。当后台计算还在进行时,这个方法用于在用户界面显示进度。u onPo
30、stExecute(Result) 当后台计算结束时,调用UI线程。后台计算结果作为一个参数传递到这步。5.4 Android后台线程后台线程 26移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理v AsyncTask使用规则l 必须遵守一些线程规则,AsyncTask类才能正确的工作。uAsyncTask 任务实例必须创建在UI线程中。uexecute(Params.)必须在UI线程上调用。u不要手动调用下列方法:ponPreExecute() ponPostExecute(Result)pdoInBackground(Params.)ponProgressUpd
31、ate(Progress.)u每个AsyncTask只能有1个实例被执行,同时运行2个以上的AsyncTask,将会抛出异常。5.4 Android后台线程后台线程 27移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理v 开发Android应用项目,首先需要整理以下内容:l 项目有哪些功能;l 需要哪些用户界面;l 各界面之间跳转的流程;l 需要的数据及其数据的来源和格式;l 是否需要服务端的支持;l 是否需要本地数据库的支持;l 是否需要特殊的权限;l 是否需要后台进程等。v 在进入具体的编码前,需要形成相关开发文档,描述上面涉及的问题。5.5 Android应用
32、开发步骤应用开发步骤 28移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理v 开发步骤l 用户界面设计u按照项目规划文档,使用XML文件描述出Android的用户界面:布局模式、视图组件、填充的数据等。l 准备需要的资源l 数据操作和存储u数据来源(SharedPreferences、数据库、ContentProvider、网络等)及存储开发。l 多页面的跳转实现u实现各个界面直接的调用和跳转流程。l 增加Serviceu实现项目需要的Service。5.5 Android应用开发步骤应用开发步骤 29移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理v 开发步骤l 完善应用细节u从网络上获取数据,在manifest.xml中需要添加相关的uses-permission;u老版本更新,在manifest.xml中需要更新versionCode,versionName;ul 应用测试u使用模拟器和Eclipse中的DDMS功能。l 打包发布5.5 Android应用开发步骤应用开发步骤 30移动终端应用开发移动终端应用开发第五章第五章 Android后台处理后台处理v 【例】设计一个单机版的音乐播放器。l 功能:u对指定的音乐进行播放、暂停、停止控制;u显示
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院与社康一体化建设项目需求
- 创新科技在公共安全领域的应用及挑战
- 2024年手工制作相关室内娱乐服务项目申请报告模板
- 2025合同样例物资领用制度范本
- 2024年LED手电筒项目立项申请报告模板
- 儿童游乐设备市场及投资分析报告
- 2025深圳市劳动合同范本(律师版)
- 2025赠予合同协议书
- 2025酒店建筑工程经济合同管理制度
- 门头房出租合同模板
- 线路工程灌注桩施工作业指导书施工方案
- 重力坝的分缝与止水
- 三重管高压旋喷桩施工工艺规程与施工方案
- 个体诊所药品清单
- 药品招商流程
- PFMEA的严重度SOD的评分和优先级别
- 国网基建国家电网公司输变电工程结算管理办法
- 100道递等式计算(能巧算得要巧算)
- 中国地图含省份信息可编辑矢量图
- 路政运政交通运输执法人员考试题库
- 企业技术标准化管理
评论
0/150
提交评论