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);
}
}
復制代碼
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 }
復制代碼
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 };
復制代碼