android学习日记19--四大组件之Services(服务)

  Android四大基本组件分别是Activity,Content Provider内容提供者,Service服务,BroadcastReceiver广播接收器。
其中Activity和Content Provider在前面都有介绍过。这里主要讲讲Service服务和BroadcastReceiver广播接收器。


一、Services(服务)

 

1、简述
  Services(服务)简单来说就是剥夺界面的Activity。它和Activity很多概念都是相似的,都是封装有一个完整的功能逻辑实现。
Services是运行在后台的一段代码,它可以运行在它自己的进程,也可以运行在其他应用程序进程的上下文(context)里面,
其它的组件可以绑定到一个服务(Service)上面,通过远程过程调用(RPC)来调用这个方法。常见的Services如后台音乐播放,
后台计算数据。

 

2、运行原理
  有两种运行方式,原理如下:
  a、使用Context.startService()来启动一个Service,从而可以在后台调用Service。同时,系统也将保持这个Service一直执行,
     直到这个Service运行结束。
  b、使用Context.bindService()方法,连接到一个Service上(如果这个Service还没有运行将启动它)。当连接到一个Service之后,
       我们还可以Service提供的接口与它进行通讯。

 

3、生命周期
  官方生命周期的图示:

  

  a、startService后,即使调用startService的进程结束了,Service仍然还存在,直到有进程调用stopService,或者Service自己自杀(stopSelf())。
  b、bindService后,Service就和调用bindService的进程同生共死了,也就是说当调用bindService的进程死了,那么它bind的Service也要跟着被结束,
     当然期间也可以调用unbindservice让 Service结束。
  c、两种方式混合使用时,比如说你startService了,我bindService了,那么只有你stopService了而且我也unbindservice了,这个Service才会被结束。

 

4、使用步骤
  a、继承service类(一般用它的子类IntentService)

  b、AndroidManifast.xml配置清单文件中<application>节点里对服务进行配置

    <service name=".SMSService"/>
  c、服务不能自己运行,需要通过Contex.startService()或Contex.bindService()启动服务

  通过startService()方法启动的服务于调用者没有关系,即使调用者关闭了,服务仍然运行想停止服务要调用Context.stopService(),
此时系统会调用onDestory(),使用此方法启动时,服务首次启动系统先调用服务的onCreate()-->onStart(),如果服务已经启动再次调用只会触发onStart()方法
使用bindService()启动的服务与调用者绑定,只要调用者关闭服务就终止,使用此方法启动时,服务首次启动系统先调用服务的onCreate()-->onBind(),
如果服务已经启动再次调用不会再触发这2个方法,调用者退出时系统会调用服务的onUnbind()-->onDestory(),想主动解除绑定可使用Contex.unbindService(),
系统依次调用onUnbind()-->onDestory();

 

5、运行实例

  写个后台播放音乐的例子,点击‘start‘按钮调用Service播放音乐,点击‘stop‘按钮停止Service停止音乐。

MyServices代码:

 1 public class MyService extends Service {
 2 
 3     private static final String TAG = "MyService";  
 4     MediaPlayer player;  
 5       
 6     @Override  
 7     public IBinder onBind(Intent intent) {  
 8         return null;  
 9     }  
10       
11     @Override  
12     public void onCreate() {  
13         Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();  
14         Log.v(TAG, "onCreate");  
15           
16         player = MediaPlayer.create(this, R.raw.ten_year);//运行例子是,需要替换音乐的名称  
17         player.setLooping(false); // Set looping  
18     }  
19   
20     @Override  
21     public void onDestroy() {  
22         Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();  
23         Log.v(TAG, "onDestroy");  
24         player.stop();  
25     }  
26       
27     @Override  
28     public void onStart(Intent intent, int startid) {  
29         Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();  
30         Log.v(TAG, "onStart");  
31         player.start();  
32     }
33 
34 }

调用、停止服务:

1  startService(new Intent(this, MyService.class));  
2  stopService(new Intent(this, MyService.class));  

最后别忘了AndroidManifast.xml里声明服务:

1 <service android:enabled="true" android:name=".MyService" />

 

BroadcastReceiver广播接收器放在下一篇介绍吧!

android学习日记19--四大组件之Services(服务),,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。