android中bindService的使用

android中经常使用service为我们的app提供服务。在app中启动一个service通常有2种方式1、startService()2、bindService();

如果使用startService只能单纯的启动一个服务,而不能让activity和service交互。如果要想使activity和service交互的话只能使用bindService()启动服务了。

下边关于bindService的使用我做了一个简单的Demo


先贴上service相关的代码


package com.wind.bindservice;


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


public class SearchService extends Service {
private Binder mBinder = new SearchBinder();
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub

//返回一个binder,这个binder在ServiceConnection中会用到
return mBinder;
}

public class SearchBinder extends Binder{
//在binder子类中写一个函数,用以获得当前service的一个实例对象
public SearchService getService(){
return SearchService.this;
}
}
//这个例子用以说明service和activity之间的交互
public int find(int i) {
int arr[] = {1,3,4,7,11,18,29};
if (i < arr.length) {
return arr[i];
} else {
return -1;
}
}
}


下边贴上activity中的代码

package com.wind.bindservice;


import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;


public class MainActivity extends Activity {
private ServiceConnection mServiceConnection;
private SearchService mService;
private TextView tv_searchResult;
private EditText et_number;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv_searchResult = (TextView)this.findViewById(R.id.searchResult);
et_number = (EditText)this.findViewById(R.id.number);
mServiceConnection = new SearchServiceConnection();

//这个就是绑定service的地方
bindService(new Intent(MainActivity.this, SearchService.class),
mServiceConnection, Context.BIND_AUTO_CREATE);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

//自定义一个类用以实现ServiceConnection接口
private class SearchServiceConnection implements ServiceConnection {


@Override
public void onServiceConnected(ComponentName name, IBinder service) {

//通过绑定service,在这个地方通过getService获得service的实例对象,其他地方就可以通过这个实例对象调用service中的方法了
mService = ((SearchService.SearchBinder)service).getService();
}


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

}

}

public void find(View v) {
int number = Integer.valueOf(et_number.getText().toString());

//通过service的实例对象调用其中的方法,实现activity和service的交互
int result = mService.find(number);
tv_searchResult.setText("查询结果为:" + result);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值