课件-第九章后台处理_第1页
课件-第九章后台处理_第2页
课件-第九章后台处理_第3页
课件-第九章后台处理_第4页
课件-第九章后台处理_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九章Android处理消息提示12BroadcastReceiver组件Android

线程3Service组件4应用开发步骤及案例5第九章

Android

处理Android系统提供一套友好的消息提示机制,不会打断用户当前的操作。常用的方式Toast一种快速的即时消息。消息内容简短。悬浮于应用程序的最上方。不获得焦点。Notification消息内容显示于

的状态栏中。按住状态栏往下拉,可以查看系统的提示消息。消息提示Toast对象Toast类在android.widget包下。Toast对象的创建通过makeText()方法实现。Toast对象通过show()方法显示在屏幕上。Toast对象一般用于某项操作执行后是否成功的消息提示。实例1:在ZSWB_Diary2中,添加Toast对象:当删除一条日志操作时给出提示。项目名为:ZSWB_Diary3。消息提示第九章

Android

处理状态条中。创建Notification对象Notification类在android.app包下。Notification无须Activity,将消息内容显示在创建Notification对象:方法一:Notification

mynotification=newNotification(icon,ticker,when);其中:icon是显示在状态栏中的图标,一般通过资源id表示。ticker是消息的文本内容。when是系统时间,一般可用System.currentTimeMillis()获得。方法二:Notification

mynotification=newNotification();mynotification.icon=R.drawable.header;mynotification.tickerText=getResources().getString(R.string.notification);…消息提示第九章

Android

处理第九章

Android

处理Notification包含如下功能:创建新的状态栏图标;在扩展的状态条窗口显示额外的信息(也可以启动另一个Intent);,发出声音(铃声,其它提示形式:闪烁/LED,让库歌曲)等。设置Notification对象缺省表现形式:Notification.DEFAULT_VIBRATE:Notification显示时伴随振动。Notification.DEFAULT_SOUND:Notification显示时伴随音乐。Notification.DEFAULT_ALL:Notification显示时伴随振动和音乐。例:mynotification.defaults=

Notification.DEFAULT_SOUND;模拟器不支持

。消息提示由Notification启动另一活动设置点击状态栏中的Notification时发送的Intent对象。例如,当点击状态栏的Notification时启动另一个活动,该活动名为NotifiedActivity。代码如下:Intent

i

=

new

Intent(this,

NotifiedActivity.class);PendingIntent

pi

=

PendingIntent.getActivity(this,

0,

i,

0);PendingIntent:PendingIntent就是一个Intent的描述,相当于对intent执行了包装,不一定一定要马上执行它,其包装后,传递给其他activity或application。点击状态栏中的Notification启动另一个活动。代码如下:myNotification.setLatestEventInfo(this,"示例","点击查看",pi);setLatestEventInfo:设置显示在拉伸状态栏中的Notification对象的属性,单击后将发送PendingIntent对象。。消息提示第九章

Android

处理NotificationManager

notificationManager

=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);notificationManager.notify(0,myNotification);

//发送Notification第九章

Android

处理NotificationManager所有的Notification都由NotificationManager来管理,通过NotificationManager显示出来。例:NotificationManager常用方法消息提示方法描述cancel(int

id)取消以前显示的一个NotificationcancelAll()取消以前显示的一个所有NotificationgetSystemService(NOTIFICATION_SERVICE)初始化一个NotificationManager对象notify(int

id,

Notificationnotification)把Notification持久地发送到状态条上第九章

Android

处理使用Notification和NotificationManager的基本步骤:⑴获取NotificationManager对象。⑵创建一个Notification对象。⑶设置Notification的各个属性:设置在状态条(Status

Bar)显示

文本提示设置发出提示音设置

振动设置LED灯闪烁设置对通知的单击事件处理⑷发送通知。消息提示第九章

Android

处理BroadcastReceiverBroadcastReceiver是对广播消息进行过滤并响应的控件。BroadcastReceiver类位于android.content包下。实现自己的BroadcastReceiver必须要

方式:动态

:在Java代码中

。(灵活)静态

:在AndroidManifest.xml中

。(常用)开发与BroadcastReceiver相关的程序,主要的工作是对onReceive()方法进行重写。注意:在onReceive()中执行的代码耗时不要超过5秒。BroadcastReceiver组件BroadcastReceiver组件第九章

Android

处理发送广播的方式用sendBroadcast和sendStickyBroadcast发送广播:所有满足条件的BroadcastReceiver都会执行其onReceive()方法来处理响应,是对广播消息进行过滤并响应的控件。当有多个满足条件的BroadcastReceiver时,不能保证其onReceive()方法的执行顺序。用sendOrderBroadcast发送:通过sendOrderBroadcast发送的Intent,会根据BroadcastReceiver

时IntentFilter设置的优先级顺序来执行onReceive()方法。对于相同优先级的BroadcastReceiver,不能保证其onReceive()方法的执行顺序。sendStickyBroadcast与其它发送方式的不同之处:Intent在发送之后一直存在,并且在以后调用registerReceive注册相匹配的Receive时会把这个Intent直接返回给新

的Receive。BroadcastReceiver组件第九章

Android

处理接收广播服务的过程开发BroadcastReveiver类的子类,在其中重载onReceive()方法;在AndroidManifest.xml中

BroadcastReceiver对象;动态

:通过调用registerReceiver()方法来

。代码如:MyReceiver

receiver=new

MyReceiver();

//创建相关对象

IntentFilter

filter=newIntentFilter();filter.addAction(DATE_CHANGED);registerReceiver(receiver,

filter);

//动态

BroadcastReceiver静态

:在AndroidManifest.xml中添加

:<receiver

android:name=".MyReceiver"><intent-filter><action

android:name="ent.action.DATE_CHANGED"/><category

android:name="ent.category.HOME"/></intent-filter></receiver>接收广播服务的过程两种 方式比较:动态

方式特点:在代码中进行

后,当应用程序关闭后,就不再进行

。静态

方式的特点:在应用程序安装之后,无论该应用程序是否处于活动状态,BroadcastReceiver始终处于被 状态。在AndroidManifest.xml中为应用程序添加适当的权限;<uses-permission

android:name=“android.permission.WRITE_SETTINGS”/>等待接收广播。

的BroadcastReceiver并非一直在

运行,一旦当事件或相关的Intent传来,就会被系统调用,处理onReceive()方法里的响应事件。BroadcastReceiver组件第九章

Android

处理BroadcastReceiver组件第九章

Android

处理实例2:通过一个按钮来发出一个广播信息,并将它显示在状态栏中。可以单击一个按钮,清除状态栏中 信息。BroadcastReceiver组件没有提供可视化的界面来显示广播信息,但可以使用Notification来实现广播信息的显示,提示音,闪烁

和振动等消息提示。本例使用状态栏显示广播信息。项目名:BroadcastRec_Demo定义两个类:BroadcastRec_DemoActivity.java,是一个Activity类,在其中

构建案例中需要广播的Intent,然后在按钮的onClick()方法中使用

sendBroadcast()方法发送出去,并且在该类的onResume()方法中

广播

。MyReceiver.java,是一个继承BroadcastReceiver的子类,在该子类的onReceive()方法中将传入的广播Intent中的

给一个通知对象。Android线程线程是比进程更小的执行单位。主线程当一个程序首次启动时,Android会启动一个LINUX进程和一个主线程。主线程负责处理与UI相关的事件,并把相关的事件分发到对应的组件进行处理。所以主线程通常又被叫做UI线程。Android

UI操作必须在UI线 执行。Android的UI是单线程(Single-threaded)的。子线程非UI线程即为子线程,子线程一般都是 线程。运用子线程的场合:进行数据、系统等其他非UI的操作。把所有运行慢的、耗时的操作移出主线程,放到子线

。第九章Android处理Android线程Handler消息传递机制Android的子线程不能直接操作UI。如果需要可以尝试使用Handler消息传递机制。Handler消息传递机制:一个Handler对应一个Activity。自定义的

线程可与Handler通信,Handler将与UI线程一起工作。Handler类位于android.os包下。Handler的常用方法方法返回类型描述handlerMessage(Message

msg)void子类对象通过该方法接收消息sendEmptyMessage(int

what)boolean发送一个只含有what值的消息sendMessage(Message

msg)boolean发送消息到HandlerhasMessages(int

what)boolean监测消息队列中是否还有what值的消息Post(Runnabler)boolean将一个线程添加到消息队列中第九章Android处理Android线程Handler的使用开发Handler类的步骤:⑴在Activity或Activity的Widget中开发Handler类的对象,重载handlerMessage方法。⑵

在新启动的线

调用sendEmptyMessage或sendMessage方法向Handler发送消息。⑶

Handler类的对象用handlerMessage方法接收消息,然后根据消息的执行相应的操作。第九章Android处理Android

线程第九章

Android

处理实例3:使用Handler机制以幻灯片的形式显示IT界的名人,每张 停留3秒钟。项目名:ThreadDemo定义两个类:Activity类:ThreadDemoActivity.java继承Thread的子类:MyThread.java三秒钟之后Android线程Asyn

kAsynAsynk是抽象类,位于android.os包下。k是一种简单的实现 运行事务的方式。利用Asyn

k 不需要自己来写 线程,无需终结线程。有效地避免了使用Handler带来的麻烦。Asyn在主线k的特点是任务在主线程之外运行,而通过回调方法执行。子类必须实现抽象方法

nBackground(Params…

p)

,这个方法是必须要重写的,用来在

线 处理一些耗费时间的事情。Asyn

k的执行分为若干步骤,每一步都对应一个回调方法,这些方法需要重写。注意:在任务的执行过 ,这些方法不由应用程序调用,而是被自动调用的。第九章Android处理Android线程k的常用方法AsynAsynk定义了三种范式类型,被用于一个异步任务。Params:当执行时,参数类型发送到任务,比如HTTP请求的URL。Progress:在

计算期间, 任务执行的百分比。Result:

计算的结果类型,比如String。Asyn k常用的需要重载的方法:方法描述onPreExecute()当任务执行之前开始调用此方法,可以在这里显示进度

框此方法在 线程执行,完成任务的主要工作,通常需要较长的时间。在执行过 可以调用nBackground(Params…)publicProgress(Progress…)来更新任务的进度onProgressUpdate(Progress…)此方法在主线程执行,用于显示任务执行的进度onPostExecute(Result)此方法在主线程执行,任务执行的结果作为此方法的参数返回第九章Android处理Android线程Asyn k使用步骤一个Asyn k运行的过⑴

onPreExecute()在execute调用后立即在ui线,经历了4个步骤:执行。这步通常被用于设置任务。⑵

nBackground(Params...)当onPreExecute()

执行完成后,立即在

线 运行。这步被用于执行较长时间的

计算。异步任务的参数也被传到这步。计算的可以调用结果必须在这步返回,将传回到上一步。在执行过publishProgress(Progress...)来更新任务的进度。⑶

onProgressUpdate(Progress...)在调用publishProgress后,在UI线

运行。执行的时机是不确定的。当

计算还在进行时,这个方法用于在用户界面显示进度。⑷

onPostExecute(Result)当

计算结束时,调用UI线程。

计算结果作为一个参数传递到这步。第九章Android处理Android线程Asyn k使用规则必须遵守一些线程规则,Asynk类才能正确的工作。Asyn k

任务实例必须创建在UI线

。execute(Params...)必须在UI线程上调用。不要手动调用下列方法:onPreExecute()onPostExecute(Result)nBackground(Params...)onProgressUpdate(Progress...)每个AsynAsynk只能有1个实例被执行,同时运行2个以上的k,将会抛出异常。第九章Android处理Android线程实例4:使用Asyn

k来完成进度由于使用Asyn k,任务在 运行,执行过程的,本例在代码中增加了输出Log的操作,便于大家看到其执行过程。项目名:Asyn

k_PgDialog在Eclipse的LogCat窗口中可以看到

操作过程的日志记录信息:第九章

Android

处理框的进度更新操作。台界面是看不到ServiceService是运行的,没有用户交互界面的“服务”。如:音乐;检测SD卡上文件的变化;数据计算,如记录用户的地理信息位置的改变;发出Notification。Service一般由Activity启动,但不依赖于Activity。也可以由其他的Service或者Broadcast

Receiver启动。Service的生命周期Service的生命周期方法比Activity要少一些,只在:onCreate()onStart()onDestroy()Service组件第九章

Android

处理经SeService的启动方式:通过startService启动启动时,依次调用onC注意:如果Service已会再执行onCreate()方Android2.0以后用on启动时会自动调用该S停止时直接进入onDes无论之前调用了几次st结束该Service。通过bindService启动启动时只运行onCreat停止时,依次调用onUService组件第九章

Android

处理第九章

Android

处理Service的进程优先级如果service正在调用onCreate()、onStart()或onDestory()方法,那么用于当前service的进程则变为前台进程以避免被

killed。如果service已经被启动,拥有它的进程仅比可见的进程低,而比不可见的进程重要,这就意味着service一般不会被killed.如果客户端已经连接到service,那么拥有它的进程则拥有最高的优先级,可以认为该service是可见的。如果service可以使用startForeground(int,Notification)方法

来将service设置为前台状态,那么系统就认为是对用户可见的,并不会在内存不足时killed。Service组件创建Service子类需要重写的方法onBind(Intent

intent)该方法是必须实现的方法,返回一个绑定的接口给Service。onCreate()该方法是当Service第一次被创建时,由系统调用。onStart(Intent

intent,

int

startId)该方法是当startService()方法启动Service时,该方法被调用。onDestroy()该方法是当Service不再使用时,由系统调用。Service组件在应用程序中使用Service,需要在AndroiManifest.xml文件中显式地

<service>

。Service组件第九章

Android

处理启动和停止Service启动Service显式启动。通过类名称,例如:Intent

myIntent=new

Intent(this,

MyService.class);myIntent.putExtra(“TOP

”,”Margherita”);startService(myIntent);隐式启动。通过Intent

Filter,例如:startService(new

Intent(this,

MyService.class));停止Service使用stopSelf()方法使用stopService()方法,例如:stopService(new

Intent(this,

MyService.class));Service组件第九章

Android

处理第九章Android实例5:Service与BroadcastReceiver联合应用功能:通过按钮启动Service,Service运行两分钟后停止,或通过点击

“停止Service”按钮中止Service;动态

一个BroadcastReceiver;通过BroadcastReceiver广播Service运行的时间。项目:项目名:Service_BroadcastDemo资源:需要预设按钮字符串代码:Service_Broad_Demo.javaMyService.java注意:在AndroidManifest.xml中需要

Service组件:<service

android:name=“.MyService”/>处理Service组件第九章Android开发Android应用项目,首先需要整理以下内容:项目有哪些功能;需要哪些用户界面;各界面之间跳转的流程;需要的数据及其数据的来源和格式;是否需要服务端的支持;是否需要本地数据库的支持;是否需要特殊的权限;是否需要 进程等。在进入具体的编码前,需要形成相关开 档,描述上面涉及的问题。处理应用开发步骤及案例开发步骤⑴用户界面设计按照项目规划文档,使用XML文件描述出Android的用户界面:布局模式、视图组件、填充的数据等。⑵准备需要的资源⑶数据操作和数据来源(SharedPreferences、数据库、ContentProvider、网络等)及

开发。⑷多页面的跳转实现实现各个界面直接的调用和跳转流程。⑸增加Service实现项目需要的Service。第九章

Android

处理应用开发步骤及案例开发步骤⑹完善应用细节从网络上获取数据,在manifest.xml中需要添加相关的uses-permission;老版本更新,在manifest.xml中需要更新versionCode,versionName;…⑺应用测试使用模拟器和Eclipse中的DDMS功能。⑻打包发布第九章

Android

处理应用开发步骤及案例音乐器实例实例6:设计一个单机版的音乐 器。功能:对指定的音乐进行

、暂停、停止控制;显示歌曲的相关信息;按下

键时,弹出“退出”选项菜单,退出时需要有退出确认

框。界面设计:只使用一个用户界面main.xml;为配合歌曲内容,设置背景;在界面的顶端放置按钮和歌曲主要信息左边并排放置两按钮,

”和“暂停”设置为一个按钮的两种状态;右边纵向放置歌曲名称、歌唱人、作词作曲人

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论