没有合适的资源?快使用搜索试试~ 我知道了~
首页Android服务Service_详解
Android服务Service_详解
需积分: 16 53 浏览量
更新于2023-05-28
评论
收藏 843KB DOC 举报
Service的生命周期 绑定Activity和Service 在BroadcastReceiver中启动Service 系统服务 时间服务 在线程中更新GUI组件 AIDL服务 在AIDL服务中传递复杂的数据
资源详情
资源评论
资源推荐

第 8 章 Android 服务
起步 的生命周期
绑定 和 在 中启动
获得系统服务 在模拟器上模拟重力感应
计时器: 预约时间
在线程中更新 组件 !全局定时器 "#()
!全局定时器 "#() !全局定时器 "#()
什么是 $% 服务 建立 $% 服务的步骤()
建立 $% 服务的步骤() 建立 $% 服务的步骤()
!本章小结
第 8 章 Android 服务
服务()是 系统中 个应用程序组件之一(其他的组件详见 节的内容)。服务
主要用于两个目的:后台运行和跨进程访问。通过启动一个服务,可以在不显示界面的前提下在后台运行
指定的任务,这样可以不影响用户做其他事情。通过 $% 服务可以实现不同进程之间的通信,这也是服
务的重要用途之一。
本章内容
的生命周期
绑定 和
在 中启动
系统服务
时间服务
在线程中更新 组件
$% 服务
在 $% 服务中传递复杂的数据
8.1 Service 起步
并没有实际界面,而是一直在 系统的后台运行。一般使用 为应用程序提
供一些服务,或不需要界面的功能,例如,从 下载文件、控制 & 播放器等。本节主要介绍
的启动和结束过程( 的生命周期)以及启动 的各种方法。
8.1.1 Service 的生命周期
本节的例子代码所在的工程目录是 '('()*
与 一样,也有一个从启动到销毁的过程,但 的这个过程比 简单
得多。 启动到销毁的过程只会经历如下 个阶段:
创建服务
开始服务

销毁服务
一个服务实际上是一个继承 ++ 的类,当服务经历上面 个阶段后,会分别调用
类中的 个事件方法进行交互,这 个事件方法如下:
1. publicvoidonCreate();//创建服务
2. publicvoidonStart(Intentintent,intstartId);//开始服务
3. publicvoidonDestroy();//销毁服务
一个服务只会创建一次,销毁一次,但可以开始多次,因此, 和 $ 方法只会被
调用一次,而 方法会被调用多次。
下面编写一个服务类,具体看一下服务的生命周期由开始到销毁的过程。
1. packagenet.blogjava.mobile.service;
2. importandroid.app.Service;
3. importandroid.content.Intent;
4. importandroid.os.IBinder;
5. importandroid.util.Log;
6.
7. //MyService 是一个服务类,该类必须从 android.app.Service 类继承
8. publicclassMyServiceextendsService
9. {
10. @Override
11. publicIBinderonBind(Intentintent)
12. {
13. returnnull;
14. }
15. //当服务第 1 次创建时调用该方法
16. @Override
17. publicvoidonCreate()
18. {
19. Log.d("MyService","onCreate");
20. super.onCreate();
21. }
22. //当服务销毁时调用该方法
23. @Override
24. publicvoidonDestroy()
25. {
26. Log.d("MyService","onDestroy");
27. super.onDestroy();
28. }
29. //当开始服务时调用该方法
30. @Override
31. publicvoidonStart(Intentintent,intstartId)
32. {

33. Log.d("MyService","onStart");
34. super.onStart(intent,startId);
35. }
36. }
在 " 中覆盖了 类中 个生命周期方法,并在这些方法中输出了相应的日志信息,
以便更容易地观察事件方法的调用情况。
读者在编写 的应用组件时要注意,不管是编写什么组件(例如,、 等),
都需要在 "*, 文件中进行配置。" 类也不例子。配置这个服务类很简单,只
需要在 "*, 文件的-++.标签中添加如下代码即可:
1. <serviceandroid:enabled="true"android:name=".MyService"/>
其中 /0 属性的值为 1,表示 " 服务处于激活状态。虽然目前
" 是激活的,但系统仍然不会启动 ",要想启动这个服务。必须显式地调用
方法。如果想停止服务,需要显式地调用 + 方法,代码如下:
1. publicvoidonClick(Viewview)
2. {
3. switch(view.getId())
4. {
5. caseR.id.btnStartService:
6. startService(serviceIntent);
//单击【StartService】按钮启动服务
7. break;
8. caseR.id.btnStopService:
9. stopService(serviceIntent);
//单击【StopService】按钮停止服务
10. break;
11. }
12. }
其中 是一个 对象,用于指定 " 服务,创建该对象的代码如下:
1. serviceIntent=newIntent(this,MyService.class);
运行本节的例子后,会显示如图 8.1 所示的界面。
图 2开始和停止服务

第 次单击【】按钮后,在 $$" 透视图的 %# 视图的 "# 列会输出如下两行
信息:
1. onCreate
2. onStart
然后单击【+】按钮,会在 "# 列中输出如下信息:
1. onDestroy
下面按如下的单击按钮顺序的重新测试一下本例。
【】→【+】→【】→【】→【
】→【+】
测试完程序,就会看到如图 8.2 所示的输出信息。可以看出,只在第 1 次单击【Start
Service】按钮后会调用 onCreate 方法,如果在未单击【Stop Service】按钮时多次单击
【Start Service】按钮,系统只在第 1 次单击【Start Service】按钮时调用 onCreate 和 onStart
方法,再单击该按钮时,系统只会调用 onStart 方法,而不会再次调用 onCreate 方法。
图 2服务的生命周期方法的调用情况
在讨论完服务的生命周期后,再来总结一下创建和开始服务的步骤。创建和开始一个服务需要如下
步:
()编写一个服务类,该类必须从 ++ 继承。 类涉及到 个生命周期方
法,但这 个方法并不一定在子类中覆盖,读者可根据不同需求来决定使用哪些生命周期方法。在
类中有一个 方法,该方法是一个抽象方法,在 的子类中必须覆盖。这个方法当
与 绑定时被调用(将在 节详细介绍)。
()在 "*, 文件中使用-.标签来配置服务,一般需要将-.标
签的 /0 属性值设为 1,并使用 / 属性指定在第 步建立的服务类名。
()如果要开始一个服务,使用 方法,停止一个服务要使用 + 方法。
8.1.2 绑定 Activity 和 Service
本节的例子代码所在的工程目录是 '('()

如果使用 节介绍的方法启动服务,并且未调用 + 来停止服务,这个服务就会随着
系统的启动而启动,随着 系统的关闭而关闭。也就是服务会在 系统启动后一
直在后台运行,直到 系统关闭后服务才停止。但有时我们希望在启动服务的 关闭后服
务自动关闭,这就需要将 和 绑定。
通过 0 方法可以将 和 绑定。0 方法的定义如下:
1. publicbooleanbindService(Intentservice,
ServiceConnectionconn,intflags)
该方法的第 个参数表示与服务类相关联的 对象,第 个参数是一个 类
型的变量,负责连接 对象指定的服务。通过 对象可以获得连接成功或失败的
状态,并可以获得连接后的服务对象。第 个参数是一个标志位,一般设为
, 3$)45)646。
下面重新编写 节的 " 类,在该类中增加了几个与绑定相关的事件方法。
1. packagenet.blogjava.mobile.service;
2.
3. importandroid.app.Service;
4. importandroid.content.Intent;
5. importandroid.os.Binder;
6. importandroid.os.IBinder;
7. importandroid.util.Log;
8.
9. publicclassMyServiceextendsService
10. {
11. privateMyBindermyBinder=newMyBinder();
12. //成功绑定后调用该方法
13. @Override
14. publicIBinderonBind(Intentintent)
15. {
16. Log.d("MyService","onBind");
17. returnmyBinder;
18. }
19. //重新绑定时调用该方法
20. @Override
21. publicvoidonRebind(Intentintent)
22. {
23. Log.d("MyService","onRebind");
24. super.onRebind(intent);
25. }
26. //解除绑定时调用该方法
27. @Override
28. publicbooleanonUnbind(Intentintent)
29. {
剩余50页未读,继续阅读







安全验证
文档复制为VIP权益,开通VIP直接复制

评论0