您的位置:首页 > 其它

使用bindService和服务的通信(bindService和startService的区别)

2011-12-24 15:30 471 查看
//目录结构



运行效果



//使用Context.bindService();和Context.startService()的区别:

binService启动的Service是和Activity绑定了,也就是说通过当前Activity启动的Service会随着当前的Activity 变化而变化,如果当前Activity卦了,那么这个通过bindService打开的Service也会卦掉,而通过startService()启动的服务则不会,它会一直在后运行着,如果第二次再启动它的话,它会执行onRestart方法,而不会去执行onCreate方法

来看一下代码

//BindStartDemoActivity.java

package sn.len.bindstart;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class BindStartDemoActivity extends Activity implements OnClickListener
{
private Button key;
private TextView value;
private IService iservice;
private myService conn;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
key=(Button)findViewById(R.id.key);
key.setOnClickListener(this);
value=(TextView)findViewById(R.id.value);
//当Activity一创建的时候就开始和service绑定
/**
* Context.startService()不能和服务通信
* Context.bindService(service,conn,1);可以和服务通信
* conn主要是和service连接的桥梁,如果连接上会主动调用onServiceConnected方法
*/
Intent service=new Intent(BindStartDemoActivity.this,BindService.class);
conn=new myService();
bindService(service, conn, 1);
}
@Override
public void onClick(View v)
{
value.setText(iservice.getName());
}
private final class myService implements ServiceConnection
{

/**
* IBinder service主要就是返回BindService类的,onBind实例
*/
@Override
public void onServiceConnected(ComponentName name, IBinder service)
{	Log.i("info", "onServiceConnected");
iservice=(IService)service;
}

//断开连接
@Override
public void onServiceDisconnected(ComponentName name)
{
Log.i("info", "onServiceDisconnected");
iservice=null;
}
}
//当Activity销毁的时候也就是解除绑定
@Override
protected void onDestroy()
{
Log.i("info", "onDestroy");
unbindService(conn);
super.onDestroy();
}

}
//BindService.java

package sn.len.bindstart;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;

public class BindService extends Service
{

/*1,返回IBinder,所以得开个,实现了IBinder接口的类
Binder implments IBinder
2,但因这样在返回,而调用参数则get不出来,所以还得弄个接口IService
*/
Binder binder=new MyBinder();
@Override
public IBinder onBind(Intent intent)
{
return binder;
}
public String getName()
{
return "已经拿到Service里面的值啦,这是使用bindService和服务的通信";
}
class MyBinder extends Binder implements IService
{
public String getName()
{
return BindService.this.getName();
}
}

}
//IService.java

package sn.len.bindstart;

public interface IService
{
String getName();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: