2011-9-17 12:40:23
来源:互联网 发布:软件帝国 编辑:程序博客网 时间:2024/04/28 07:55
2011-9-17 12:40:23
android Service 的简单使用(学习别人)
1、要使用Service,首先就是在配置文件里吗添加Service,如果不填加,你的Service是不能够使用的。目前学到的方法有两种
方法一:<service android:enabled="true" android:name=".PlayService" />
方法二:<service android:name=".PlayService" />
点后面是Service类的名字。
2、工程包括两个类:
ServiceActivity.java
PlayService.java
其中:ServiceActivity.java定义了两个按钮,分别控制音乐的播放与停止。
用startService和stopService完成Activity与Service之间的切换,启动Service以及取消Service,
如果不用按钮,可以在Activity的OnCreate和OnDestrpy里面启动和取消Service,如下:
代码
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);this.startService(new Intent(this, PlayService.class));}@Overrideprotected void onDestroy() {super.onDestroy();this.stopService(new Intent(this,PlayService.class));}
在activity里面,如果需要使用Service的话,需要调用startService(),从而利用startService()去调用Service中的OnCreate()和onStart()方法来启动一个后台的Service。
启动一个Service的过程如下:context.startService() ->onCreate()->onStart()->Servicerunning其中onCreate()可以进行一些服务的初始化工作,onStart()则启动服务。
停止一个Service的过程如下:context.stopService() |->onDestroy() ->Service stop
创建Service需要继承自 android.app.Service 的类,然后重新实现在Service各个状态要回调的方法,Service的回调方法有三个,分别是:
?onCreate()
创建
?onStart()
开始
?onDestry()
释放
注意:Service是不能自己启动的,只有通过 Context 对象 调用startService和bindService方法来启动。也就是说Service不能自己调用的,
所以我们看见很多Service都是用Activity调用的。
(1)Context.startService():Service会经历onCreate -> onStart(如果Service还没有运行,则android先调用onCreate()然后调用onStart();
如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次);
stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。
该Service的调用者再启动起来后可以通过stopService关闭Service。 注意,多次调用Context.startservice()不会嵌套(即使会有相应的onStart()方法被调用),
所以无论同一个服务被启动了多少次,一旦调用Context.stopService()或者stopSelf(),他都会被停止。补充说明:传递给startService()的Intent对象会传递给onStart()方法。
调用顺序为:onCreate --> onStart(可多次调用) --> onDestroy。
(2)Context.bindService():Service会经历onCreate() -> onBind(),onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法
,比如得到Service运行的状态或其他操作。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,
Srevice就会调用onUnbind -> onDestroyed相应退出,所谓绑定在一起就共存亡了。
补充说明:传递给bindService()的Intent对象会传递给onBind(),传递给unbindService()的Intent对象会传递给onUnbind()方法。
调用顺序为:onCreate --> onBind(只一次,不可多次绑定) --> onUnbind --> onDestory。
要调方法必须要绑定么?
(3)注意事项:在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),
其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。还有一点,目前我没有遇到过需要startService和bindService交互使用的情况(我认为不会有这种需求),所以不必去考虑交互的问题,待遇到时再考虑不迟。
(4)BroadcastReceiver只能通过startService启动Service,因为广播本身生命周期很短,bind的话没有意义
PlayService.java是Service类,
包括OnCreate,OnStart,OnDestroy三种方法,
其中OnCreate可有可无,如果有,可以在这里创建与MediaPlayerd的链接。如果无,可以在Onstart里面创建这个链接。
OnCreate在音乐播放周期里面(未OnDestroy)之前,只创建一次,而每按一次播放,OnStart就会被调用一次。
OnStart,里面可以启动播放音乐,
OnDestroy,里面调用停止播放音乐。
如果按了停止按钮,会调用(或者打印Log更直观)“ServiconDestroy“,但是Activity不会退出。
当退出Activity的时候,会相继调用(或者打印Log更直观)"ActivityonStop",和"ActivityOnDestroy"此时,音乐播放是不会停止的,
可以知道,如果想让Service一启动就执行的代码,可以写在Service的OnCreate或OnStart,里面,会在启动Service的时候自动调用,与Activity自动调用OnCreate道理是一样的。
真烂
- 2011-9-17 12:40:23
- 2011-8-12 17:23:21
- 2011-9-23 12:05:13
- 2011-9-17 12:21:52
- 2011-9-17 12:24:14
- 2011-9-17 12:54:43
- 2011-9-17 12:58:21
- 2011-12-23
- 2011-9-23
- 2011-1-17,2011-1-23
- Struts2获取request三种方法 (2011-03-23 17:12:18)
- 2011-02-17 13:40:21
- 8/17/2011 1:40:45 PM
- python 学习心得2011-9-23
- 2011-9-17 17:22:00
- 2011-9-17 17:59:04
- 2013-12-18 17:38:40
- Android学习二_七:AppWidget使用(三) (2011-12-31 23:09:17)转载▼
- CDN总结之三
- MFC OnCtlColor函数用来改变控件颜色
- JDev 11.1.2: Differences in Table Behavior
- 用于图像融合的两种方法
- 整新东西的时候
- 2011-9-17 12:40:23
- 感官实现智能手机付费,可能吗?让万事达卡来告诉你吧
- 2011-9-17 12:54:43
- mfc 带滚动条的对话框 滚动条消息响应方法
- 项目经理问:为什么总是只有我在加班 – 挂包袱现象 .
- 2011-9-17 12:58:21
- Oracle笔记3(Fundamentals II)
- 分治法实现全排列
- MFC点点滴滴——Invalidate/InvalidateRect/UpdateWindow