Service

Service与Activity都是Android系统中的运行单元,只是后者有接口布局文件作为其操作界面,而前者无操作界面,专门负责运行一项制定的工作,直到完成或被其控制程序停止。

Service与Thread很相似,都是独立运行的对象,也是幕后运行无界面,Thread是java内建类,而Service是Android根据其特性和架构设计的,所以在Android中优先建议使用Service。

Service的两种调用方法:startService();bindService()。

Service的生命周期:

startService():onCreate()、onStart()/onStartCommand()(Android2.0以前只有onStart())、onDestroy()

bindService():onCreate()、onStart()/onStartCommand()(Android2.0以前只有onStart())、onUnbind()、onDestroy()

1、新建一个继承Service的新类,利用右键Source > Override/Implement Methods 重写onCreate()、onStartCommand()、onDestroy()、onUnbind():

 1 package com....;
 2 
 3 import android.app.Service;
 4 import android.content.Intent;
 5 import android.os.Binder;
 6 import android.os.IBinder;
 7 
 8 public class MyService extends Service {
 9 
10     public class LocalBinder extends Binder
11     {
12         MyService getService() {
13             return MyService.this;
14         }
15         
16     }
17     private LocalBinder mLocBin = new LocalBinder();
18     @Override
19     public IBinder onBind(Intent arg0) {
20         // TODO Auto-generated method stub
21         return mLocBin;
22     }
23 
24     @Override
25     public void onCreate() {
26         // TODO Auto-generated method stub
27         super.onCreate();
28     }
29 
30     @Override
31     public void onDestroy() {
32         // TODO Auto-generated method stub
33         super.onDestroy();
34     }
35 
36     @Override
37     public int onStartCommand(Intent intent, int flags, int startId) {
38         // TODO Auto-generated method stub
39         return super.onStartCommand(intent, flags, startId);
40     }
41 
42     @Override
43     public boolean onUnbind(Intent intent) {
44         // TODO Auto-generated method stub
45         return super.onUnbind(intent);
46     }
47 
48 }

其中onBind()方法必须传回类中建立的一个LocalBinder类的对象,否则无法完成Bind Service的动作。LocalBinder是内部类,继承Binder类,其中有getService方法,传回MyService对象,就是根据这个方法才能调用bindService()时取得MyService对象。

2、在AndroidManifest.xml中注册Service:

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

3、在程序中启动Service:

startService():

        Intent it = new Intent(类名称.this,Service类名称.class);
        startService(it);
...
stopService(it);

bindService():

首先建立ServiceConnection对象,取得Service对象,并存入定义在主程序中的MyService属性;

onServiceConnected()在bind Service时系统调用;onServiceDisconnected()在Service对象不正常结束时运行,一般情况不允许。

    private  ServiceConnection mServConn = new ServiceConnection() {
        
        @Override
        public void onServiceDisconnected(ComponentName name) {
            // TODO Auto-generated method stub
            
        }
        
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            // TODO Auto-generated method stub
//取得Service对象 MyService mMyServ = ((MyService.LocalBinder)service).getService(); } };

2、建立Intent对象并指定要启动的Service类,调用bindService()。

        Intent it = new Intent(类名称.this,Service类名称.class);
        bindService(it, mServConn, BIND_AUTO_CREATE);
        ...
        unbindService(mServConn);

 

posted @ 2015-08-26 15:47  Ghimtim  阅读(280)  评论(0编辑  收藏  举报