Android菜鸟的成长笔记(16)——Service简介

来源:互联网 发布:淘宝卖耐克 编辑:程序博客网 时间:2024/06/05 16:44

Service是Android四大组件之一

1、Service与Activity的区别在:Service一直在后台运行,没有用户界面。

2、选择Activity与Service的标准:如果某个程序组件需要在运行时向用户呈现某种界面,或者改程序需要和用户进行交互,就需要用Activity,否则需要考虑使用Service.

3、Android系统本身提供了大量的Service组件,开发者可以通过Service来操作Android系统。

4、Service组件有自己的生命周期。

5、Service与Activity都是从Context派生而来的,都可以调用Context里面定义的如getResources()、getContentResolver()等方法。

下面我们来先创建一个Service并启动

(1)定义一个继承Service的子类。

  1. package com.example.testservice;  
  2.   
  3. import android.app.Service;  
  4. import android.content.Intent;  
  5. import android.os.IBinder;  
  6.   
  7. public class FirstService extends Service{  
  8.   
  9.     @Override  
  10.     public IBinder onBind(Intent arg0) {  
  11.         // TODO Auto-generated method stub  
  12.         return null;  
  13.     }  
  14.       
  15.     @Override  
  16.     public void onCreate() {  
  17.         // TODO Auto-generated method stub  
  18.         super.onCreate();  
  19.         System.out.println("onCreate");  
  20.     }  
  21.       
  22.     @Override  
  23.     public int onStartCommand(Intent intent, int flags, int startId) {  
  24.         // TODO Auto-generated method stub  
  25.         System.out.println("onStartCommand");  
  26.         return super.onStartCommand(intent, flags, startId);  
  27.           
  28.     }  
  29.       
  30.     @Override  
  31.     public void onDestroy() {  
  32.         // TODO Auto-generated method stub  
  33.         super.onDestroy();  
  34.         System.out.println("onDestroy");  
  35.     }  
  36.   
  37. }  
  注意:上面的onBind()方法是必须实现的方法。
(2)在AndroidMainfest.xml文件中配置该Service

  1. <service android:name=".FirstService">  
  2.             <intent-filter >  
  3.                 <action android:name="com.meritit.service.FIRST_SERVICE"/>  
  4.             </intent-filter>  
  5.  </service>  
如果希望Service组件做某些事情,只要在onCreate()onStartCommand()方法中定义相关业务代码即可。

(3)运行Service

运行Service的方法有两种:

a: 通过Context的startService()方法:通过该方法启动Service,访问者与Service之间没有关联,即使访问者退出了,Service任然运行。

b:通过Context的bindService()方法:使用该方法启动Service,访问者与Service绑定在了一起,访问者一旦退出,Service也就终止了。

下面先通过第一种方式运行Service

  1. package com.example.testservice;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.Button;  
  9.   
  10. public class MainActivity extends Activity {  
  11.     private Button start;  
  12.     private Button stop;  
  13.     @Override  
  14.     protected void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.activity_main);  
  17.           
  18.         //获取程序界面中的start、stop两个按钮  
  19.         start = (Button) findViewById(R.id.start);  
  20.         stop = (Button) findViewById(R.id.stop);  
  21.           
  22.         final Intent intent = new Intent();  
  23.         intent.setAction("com.meritit.service.FIRST_SERVICE");  
  24.           
  25.         start.setOnClickListener(new OnClickListener() {  
  26.               
  27.             @Override  
  28.             public void onClick(View arg0) {  
  29.                 startService(intent);  
  30.             }  
  31.         });  
  32.           
  33.         stop.setOnClickListener(new OnClickListener() {  
  34.               
  35.             @Override  
  36.             public void onClick(View v) {  
  37.                 stopService(intent);  
  38.             }  
  39.         });  
  40.     }  
  41. }  
从上面代码中可以看出,启动、关闭Service非常容易,只需要调用Context里面定义的startService()方法和stopService()方法。

连续单击“启动Service"按钮,程序将会连续多次启动Service,LogCat如图:


从图中我们可以看出,onCreate方法只被调用了一次,这说明:每次Service被第一次启动调用onCreate()方法,多次启动已经启动的Service组件将不会再回调onCreate()方法啊,但每次启动时都会回调onStartCommand()方法,这样就可以根据不同的业务需求将业务代码放在onCreate()方法或onStartCommand()方法中。下图是Service的生命周期,因为比较简单所以就不叙述过程了。



下一篇将介绍:绑定本地Service并与之通信

0 0