服务———Service
 是什么Service? 

 Service是与Activity最相似的一个组件,但是Service是在后台运行,没有用户界面。 

 1--创建于配置 

 与Activity一样,Service也提供了生命周期方法: 

 abstract Ibinder onBinder(Intent intent) 
 :返回一个Ibinder对象,引用程序可通过该对象与Service组件通信 

 void onUnbind(Intent intent):当断开连接时将会回调 

 void onCreate() 
 :当创建时 

 void onStartCommand() 
 :当启动时 

 void onDestroy() 
 :当销毁时 



 创建一个Service: 

 publice class MyService extends Service{ 

 @Override 

 public Ibunder onBinder(Intent intent){ 

 return null; 

 } 

 @Override void onCreate( 

 { 

 super.onCreate(); 

 System.out.prinltn("Service is created"); 

 } 

 } 

 //创建一个Service的子类,必须实现abstract Ibnder onBinder()方法; 

 配置Service与配置Activity基本相同,在此不详讲。 



 2--启动与停止Service 

 Service有两种方法; 

 startService(); 
  

 stopService() 
 //简单地启动,停止Service 

 bindService(); 

 unbindService(); 
 //Service与访问者之间进行数据交换 



 前面已经bindService的详细方法: 

 bindService(Intent service,ServiceConnection conn,int flags) 

 该函数有三个参数: 

 》service:通过Intent要启动的Serveice 

 》conn:该参数返回一个ServiceConnection对象,该对象用于监听访问者与Service的连接情况 

 当连接成功将回调onServiceConnected(CompnentName name,IBider service)方法;不成功将回调onServiceDisconnected()方法 

 》flags:指定是否自动创建Service,可为0(不自动)或者BIND_AUto_CERATE(自动创建) 

 当使用bindService()方法后,建立连接后,Service的onBind()方法会返回Ibinder对象,(前面已经说过,该对象用于通信) 

 返回的Ibinder将传给onServiceConnected(CompnentName name,IBider service)的第二个参数,这样访问者就可以与Service通信了。 

 // 

 注意到,Ibinder为抽象类,需要写一个实现类 

 // 

 通信示例: 

 import android.app.Service; 

 import android.content.Intent; 

 import android.os.Binder; 

 import android.os.IBinder; 

 public class BindService extends Service 

 { 

private int count; 

private boolean quit; 

// 定义onBinder方法所返回的对象 

private MyBinder binder = new MyBinder(); 

// 通过继承Binder来实现IBinder类 

public class MyBinder extends Binder 

{ 

public int getCount() 

{ 

// 获取Service的运行状态:count 

return count; 

} 

} 

// 必须实现的方法 

@Override 

public IBinder onBind(Intent intent) 

{ 

System.out.println("Service is Binded"); 

// 返回IBinder对象 

return binder; 

} 

// Service被创建时回调该方法。 

@Override 

public void onCreate() 

{ 

super.onCreate(); 

System.out.println("Service is Created"); 

// 启动一条线程、动态地修改count状态值 

new Thread() 

{ 

@Override 

public void run() 

{ 

while (!quit) 

{ 

try 

{ 

Thread.sleep(1000); 

} 

catch (InterruptedException e) 

{ 

} 

count++; 

} 

} 

}.start(); 
  

} 

// Service被断开连接时回调该方法 

@Override 

public boolean onUnbind(Intent intent) 

{ 

System.out.println("Service is Unbinded"); 

return true; 

} 

// Service被关闭之前回调。 

@Override 

public void onDestroy() 

{ 

super.onDestroy(); 

this.quit = true; 

System.out.println("Service is Destroyed"); 

} 

 

@Override 

public void onRebind(Intent intent)  

{ 

super.onRebind(intent); 

this.quit = true; 

System.out.println("Service is ReBinded"); 

} 
  

 } 

 //mainActivity 

 public class MainActivity extends Activity 

 { 

Button bind , unbind , getServiceStatus; 

// 保持所启动的Service的IBinder对象 

BindService.MyBinder binder; 

// 定义一个ServiceConnection对象 

private ServiceConnection conn = new ServiceConnection() 

{ 

// 当该Activity与Service连接成功时回调该方法 

@Override 

public void onServiceConnected(ComponentName name 

, IBinder service) 

{ 

System.out.println("--Service Connected--"); 

// 获取Service的onBind方法所返回的MyBinder对象 

binder = (BindService.MyBinder) service; 

} 

// 当该Activity与Service断开连接时回调该方法 

@Override 

public void onServiceDisconnected(ComponentName name) 

{ 

System.out.println("--Service Disconnected--"); 
 

} 

}; 

@Override 

public void onCreate(Bundle savedInstanceState) 

{ 

super.onCreate(savedInstanceState); 

setContentView(R.layout.main); 

// 获取程序界面中的start、stop、getServiceStatus按钮 

bind = (Button) findViewById(R.id.bind); 

unbind = (Button) findViewById(R.id.unbind); 

getServiceStatus = (Button) findViewById(R.id.getServiceStatus); 

//创建启动Service的Intent 

final Intent intent = new Intent(); 

//为Intent设置Action属性 

intent.setAction("org.crazyit.service.BIND_SERVICE"); 
 

bind.setOnClickListener(new OnClickListener() 

{ 

@Override 

public void onClick(View source) 

{ 

//绑定指定Serivce 

bindService(intent , conn , Service.BIND_AUTO_CREATE); 
 

} 

}); 

unbind.setOnClickListener(new OnClickListener() 

{ 

@Override 

public void onClick(View source) 

{ 

//解除绑定Serivce 

unbindService(conn); 

} 

}); 
  

getServiceStatus.setOnClickListener(new OnClickListener() 

{ 

@Override 

public void onClick(View source) 

{ 

// 获取、并显示Service的count值 

Toast.makeText(MainActivity.this 

, "Serivce的count值为:" + binder.getCount() 

, 4000) 

.show(); 

} 

}); 

} 

 } 



 3--Service的生命周期 

 当用StartService方法时: 

 onCreate()-->onStart()-->onDestroy() 

 当用bindService时: 

 onCreate()-->onbind()-->onUnbind()-->onDestroy()