系统服务(Service)

Servicesandroidlinux,让人心动的功能,手机上也开发系统服务,当然,这还得归功于Linux系统内核。

眼高手底,是我经常犯的毛病,在Service是又犯了,失败。用代码说话。

创建一个Service的过程(示例)

import android.app.Service;

import android.content.Intent;

import android.os.Binder;

import android.os.IBinder;

 

 

public class MyService extends Service {

 

   private final IBinder mBinder = new MyBinder();

   @Override

   public void onCreate() {

      super.onCreate();

   } 

 

   @Override

   public IBinder onBind(Intent intent) {

      // TODO Auto-generated method stub

      return mBinder;

   }

 

   public class MyBinder extends Binder {

      MyService getServices() {

         return MyService.this;

      }

   }

  

   @Override

   public void onStart(Intent intent, int startId) {

      super.onStart(intent, startId);

   }

  

   @Override

   public void onDestroy() {

      super.onDestroy();

   }

 

}

上面示例代码完成较完成的演示了如何创建一个Serivce及重量的几个方法(生命周期)

onCreate():当第一次创建服务时,系统自动调用此方法。一般服务的的所有初始化操作代码放到此块中。

onStart(Intent intent, int startId)API文档上说此方法已经过时,推荐使用int onStartCommand (Intent intent, int flags, int startId)

暂时还没有搞明白onStartCommand

OnStart()方法,当客户端启动或每次绑定服务时由系统自动调用。

onDestroy():在服务注销时系统自动调用,一些清理工作在此完成。

 

服务写完之后,还必须在AndroidMainifest.xml中注册。

<service android:name="cn.myandroid.MyService" />

如果服务中用到了一些权限,还必须注册相应的<uses-permission>

Ok,到此一个服务基本不创建完成。下面介绍如果在客户端启动一个服务。

 

public class MyActivity extends Activity {

 

   private MyService mService;

   private static boolean ISRUNNING = false;

 

   @Override

   public void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      startMyService();// 启动

   }

 

   @Override

   public void onResume() {

      super.onRestart();

 

      if (ISRUNNING) {

         bindMyService();

      }

   }

 

   @Override

   public void onDestroy() {

      super.onDestroy();

//    if (ISRUNNING) {

//       unbindMyService();

//    }

   }

  

 

   private ServiceConnection mConnection = new ServiceConnection() {

      @Override

   public void onServiceConnected(ComponentName name, IBinder service) {

         // TODO Auto-generated method stub

         mService =

((MyService.MyBinder)service).getServices();

      }

 

      @Override

      public void onServiceDisconnected(ComponentName name) {

         // TODO Auto-generated method stub

      }

   };

 

Intent intent = new Intent(MyActivity.this, MyService.class);

   // 启动服务

   private void startMyService() {

      startService(intent);

      ISRUNNING = true;

   }

 

   // 绑定

   private void bindMyService() {

bindService(intent, mConnection,Context.BIND_AUTO_CREATE);

   }

 

   // 取消绑定

   private void unbindMyService() {

      unbindService(mConnection);

   }

 

   private void stopMyService() {

      stopService(intent);

      ISRUNNING = false;

   }

 

}

 

上述代码展示了一个ActivityClient)如何启动并绑定一个服务的。主要是利用了Activity的生命周期来创建、绑定、取消绑定一个服务。

上面代码中没有没用调用stopMyService()退出个服务,可根据你的需要进行调用。

posted on 2010-06-09 22:06  深挖三尺  阅读(871)  评论(0编辑  收藏  举报