Android Service组件(1)

android service 和其他服务一样,并没有实际运行的界面,它运行在android 后台。一般通过service为应用程序提供服务(比如,从Internet下载文件,控制音乐播放器等)。Service的生命周期要比activity简单的多,它只有三个阶段(创建服务、开始服务、销毁服务)。下面通过具体事例讲解android的service组件。

1.创建android工程

在Eclipse中创建android工程 android_service_one

2.创建Service

在android工程中,创建包com.example.service,并添加方法MyService。该方法继承与Service。该类用来展示服务的三个生命周期。

 

package com.example.service;

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

/*
 * 
 */
public class MyService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
    //第一次打开时调用
    public void onCreate()
    {
        Log.d("MyService", "onCreate");
        super.onCreate();
    }
    //停止时调用
    public void onDestory()
    {
        Log.d("MySerVice", "onDestory");
        super.onDestroy();
    }
    //开始时调用
    public void onStart(Intent intent,int startId)
    {
        Log.d("MyService", "onStart");
        super.onStart(intent, startId);
    }
}
MyService

3.调用服务

在android 活动组件中调用刚刚建立的服务,调用之前需要在AndroidManifest.xml中对该服务进行配置。通过<service></service>来配置服务组件。

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

服务配置完成以后,可以调用该服务。服务与activity之间的交互依然通过Intent来进行通信。启动服务通过startservice(intent),停止服务通过stopservice(Intent intent)来完成。

Intent的声明:Intent Intent=new Intent(this,MyService.class);

 1     public void onClick(View v) {
 2         // TODO Auto-generated method stub
 3         switch(v.getId())
 4         {
 5         case R.id.button1:
 6             startService(serviceintent);
 7             break;
 8         case R.id.button2:
 9             stopService(serviceintent);
10             break;
11         }
12     }
服务的停止与启动

4.Service与Activity绑定

Service与Activity绑定,当Activity启动时,服务自动启动。当Activity被销毁时,服务也被销毁。这里需要在MyService中重写 onBind、onRebind和onUnbind等几个方法。

 1 package com.example.service;
 2 
 3 import android.app.Service;
 4 import android.content.Intent;
 5 import android.os.Binder;
 6 import android.os.IBinder;
 7 import android.util.Log;
 8 
 9 /*
10  * 
11  */
12 public class MyService extends Service {
13 
14     private MyBinder myBinder= new MyBinder();
15     
16     @Override
17     //成功绑定时调用该方法
18     public IBinder onBind(Intent intent) {
19         // TODO Auto-generated method stub
20         Log.d("MyService", "onBind");
21         return myBinder;
22     }
23     
24     //重新绑定时调用该方法
25     public void onRebind(Intent intent)
26     {
27         Log.d("MyService", "onRebind");
28         super.onRebind(intent);
29     }
30     
31     //解除绑定时调用该方法
32     public void onUnBind(Intent intent)
33     {
34         Log.d("MyService", "onUnbind");
35         super.onUnbind(intent);
36     }
37     //第一次打开时调用
38     public void onCreate()
39     {
40         Log.d("MyService", "onCreate");
41         super.onCreate();
42     }
43     //停止时调用
44     public void onDestory()
45     {
46         Log.d("MySerVice", "onDestory");
47         super.onDestroy();
48     }
49     //开始时调用
50     public void onStart(Intent intent,int startId)
51     {
52         Log.d("MyService", "onStart");
53         super.onStart(intent, startId);
54     }
55     
56     //绑定类
57     public class MyBinder extends Binder
58     {
59         //返回服务实例
60         public MyService getService()
61         {
62             return MyService.this;
63         }
64     }
65 }
MyService

5.调用服务

在Activity中声明服务变量 Myservice myService,和声明ServiceConnection连接变量。绑定变量调用bindService(serviceintent, conn, Context.BIND_AUTO_CREATE);

解除绑定调用,unbindService(ServiceConnection).

 1     Intent serviceintent;
 2     private MyService myService;
 3     private ServiceConnection conn=new ServiceConnection() {
 4         
 5         @Override
 6         public void onServiceDisconnected(ComponentName name) {
 7             // TODO Auto-generated method stub
 8             myService=null;
 9             Toast.makeText(MainActivity.this, "服务连接失败", Toast.LENGTH_LONG).show();
10         }
11         
12         @Override
13         public void onServiceConnected(ComponentName name, IBinder service) {
14             // TODO Auto-generated method stub
15             myService=((MyService.MyBinder)service).getService();
16             Toast.makeText(MainActivity.this, "服务连接成功", Toast.LENGTH_LONG).show();
17         }
18     };
ServiceConnection

 

posted on 2014-10-31 16:46  水击三千  阅读(682)  评论(1编辑  收藏  举报

导航