您的位置:首页 > 移动开发 > Android开发

Android service(二)绑定服务

2016-06-24 11:09 288 查看
上一节学习的基本服务,只能服务里面做一些操作,它不能与程序进行交互。绑定服务就可以达到与程序的通信。下面通过具体的实例来学习和使用绑定服务。

1.创建服务

public class MyService extends Service {

private DownloadBinder mBinder = new DownloadBinder();

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.i("info", "onBind");
return mBinder;
}

@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.d("info", "onCreate....");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.d("info", "onStartCommand....");
return super.onStartCommand(intent, flags, startId);
}

@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.d("info", "onDestroy....");
}

public class DownloadBinder extends Binder {
private int progress = 0;

public void startDownload() {
Log.d("info", "start download....");
}

public int getProgress() {
progress++;
return progress;
}
}
}


2.在AndroidMainfest.xml中注册服务

<service android:name="com.example.bindservice.MyService" >
</service>


3.添加绑定和解绑按钮,并添加相应的事件处理

public class MainActivity extends Activity {

private MyService.DownloadBinder mDownloadBinder;
private ServiceConnection conn = new ServiceConnection() {

@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub

}

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
mDownloadBinder = (MyService.DownloadBinder) service;
mDownloadBinder.startDownload();
int progress = 0;
for (int i = 0; i < 10; i++) {
progress = mDownloadBinder.getProgress();
Log.i("info", "cur : " + progress);
}
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bind = (Button) findViewById(R.id.bind);
bind.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MainActivity.this, MyService.class);
bindService(intent, conn, BIND_AUTO_CREATE);
}
});
Button unbind = (Button) findViewById(R.id.unbind);
unbind.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

unbindService(conn);
}
});
}
}


可以看到绑定服务是需要通过一个服务通信的函数来连接程序和服务的。BIND_AUTO_CREATE是指在服务生成的时候自动创建。在连接服务中,持续获取progress的值。同时在服务中,没获取一次值就把progress加1.

点击绑定服务按钮,查看Logcat:



可以看到程序调用了onCreate和onBind。之后就是获取到了progress的值。在开发中,我们可以通过持续监听某个变量来对执行某些操作。

再次点击绑定服务是不会有任何效果的,绑定服务只能绑定一次。点击解绑按钮,可以解绑服务。

项目地址:明天更新

心记不如淡墨。。哈哈

4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android service