Service是程序后台运行的体现,需要在Androidmanifest文件中注册。示例:后台播放音乐和天气类软件的前台Service。
首先Service和Activity都是运行在主线程里的,另外Service与线程一点关系都没有。
启动方式有startService和bindService两种。以bindService的方式启动Service时可以与Activity进行交互,所以只写这种用法。
//MainActivity.java
public class MainActivity extends Activity implements OnClickListener{
Button btn1,btn2,btn3,btn4;
Intent intent1;
MyService service;
/*--*/
ServiceConnection conn = new ServiceConnection() {
@Override/*Activity与Service异常解除关联时执行此方法*/
public void onServiceDisconnected(ComponentName arg0) {
// TODO Auto-generated method stub
}
@Override/*Activity与Service关联时执行此方法*/
public void onServiceConnected(ComponentName arg0, IBinder binder) {
// TODO Auto-generated method stub
/*下面语句的作用就是当Activity与Service关联时获取该Service对象(总不能NEW一个Service对象用吧)*/
service=((MyService.MyBinder)binder).getService();
System.out.println("Conn--->onServiceConnected()");
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1=(Button) findViewById(R.id.button1);
btn2=(Button) findViewById(R.id.button2);
btn3=(Button) findViewById(R.id.button3);
btn4=(Button) findViewById(R.id.button4);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
btn4.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch(arg0.getId())
{
case R.id.button1:
/*用intent关联Activity与Service并通过bindService启动服务*/
intent1 = new Intent(MainActivity.this,MyService.class);
bindService(intent1,conn,Service.BIND_AUTO_CREATE);
break;
case R.id.button2:
service.Paly();
break;
case R.id.button3:
service.Stop();
break;
case R.id.button4:
/*解除绑定*/
unbindService(conn);
break;
}
}
}
//MyService.java
public class MyService extends Service{
/*在MyService中写一个MyBinder内部类我感觉是介于ServiceConnection中方法的参数*/
public class MyBinder extends Binder{
public MyService getService(){
return MyService.this;
}
}
public void Paly(){
System.out.println("Service--->Paly()");
}
public void Stop(){
System.out.println("Service--->Stop()");
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
System.out.println("Service--->onBind()");
return new MyBinder();
}
@Override
public void unbindService(ServiceConnection conn) {
// TODO Auto-generated method stub
System.out.println("Service--->unbindService()");
super.unbindService(conn);
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
System.out.println("Service--->onCreate()");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
System.out.println("Service--->onStartCommand()");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("Service--->onStartCommand()");
}
}