android--服务程序的例子

来源:互联网 发布:计算机网络原理 知乎 编辑:程序博客网 时间:2024/05/01 04:22
发先我的博文里没有关于服务程序的例子,感觉不完整。服务在我们手机很多,当手机开机后,你会发现有很多程序都随之启动,而且是关不掉的,他们就是常驻系统的程序。
下面贴一个简单的服务程序的例子,虽然比较简单,但是基本的框架已经有了。可以借鉴的哦。

packagecom.lw.myandroid;

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;

//反复执行的服务程序框架
public class MyService extends Service {

 
   privatestatic final String  TAG = "HIPPO";
    privateHandler objHandler = new Handler();
   
    privateint  intCounter = 0;
    privateRunnable mTask = new Runnable() {
      
      @Override
       public voidrun() {
         
         ++intCounter;
          Log.i(TAG,"Counter: "+Integer.toString(intCounter));
         System.out.println("Counter: "+Integer.toString(intCounter));
         
         objHandler.postDelayed(mTask, 1000);
       }
    };
   
   @Override
    public voidonCreate() {
      
       Log.i(TAG,"Service  onCreate()");
      System.out.println("Counter: "+Integer.toString(intCounter));
      objHandler.postDelayed(mTask, 1000);
      super.onCreate();
    }

   @Override
    public voidonStart(Intent intent, int startId) {
       // TODOAuto-generated method stub
       Log.i(TAG,"Service  onStart()");
      System.out.println("Counter: "+Integer.toString(intCounter));
      super.onStart(intent, startId);
    }

   @Override
    publicIBinder onBind(Intent intent) {
       // TODOAuto-generated method stub
       Log.i(TAG,"Service  onBind()");
      System.out.println("Counter: "+Integer.toString(intCounter));
       returnnull;
    }

   @Override
    public voidonDestroy() {
      
       Log.i(TAG,"Service  onDestroy()");
      System.out.println("Counter: "+Integer.toString(intCounter));
      objHandler.removeCallbacks(mTask);
      super.onDestroy();
    }
}

//下面是关于这个程序的理解
一。形式:
一个简单的服务程序必须是继承自android.app.Service的子类,这类程序没有UI界面,是操作系统的常驻程序。必须实现publicIBinder onBind(Intent intent);方法。

二。虽然服务程序一旦启动,就会在后台运行,但是却没有反复运行的能力,必须通过类似timer的机制来达到目的。这类技巧通常用在:系统常数检测,想网络验证数据,后台同步数据等。

三。通常在服务程序中实现一个Runnable接口。具体操作如下:

配置文件中的写法:
<service
         android:name=".MyService"
         android:exported="true"
         android:process=":remote"
      />

其中,android:exported="true"表示,服务可以被其它程序访问。

服务程序的写法:
//定义Runnable接口,反复打印数据
private Runnable mTask = new Runnable() {
      
      @Override
       public voidrun() {
         
          Log.i(TAG,"Counter: "+Integer.toString(intCounter));
         
         objHandler.postDelayed(mTask, 1000);
       }
    };

//启动服务
public void onCreate() {
      
       Log.i(TAG,"Service  onCreate()");
      objHandler.postDelayed(mTask, 1000);
      super.onCreate();
    }

四。需要注意的是:在程序里同时启动两个服务程序,并不会重复执行,这是因为,较晚的服务程序实例会再一次调用,Service.onStart(),即前者被停止,最后只会有一个服务程序在执行。

到此,例子已经讲完了。