标签:绑定service
在Android应用程序中,Activity负责界面的显示,Service负责后台工作,当然后台和界面是需要交互的,所以Activity需要和Service交互.
比较常用的是Activity和本地Service的交互,本文介绍的便是这种,最终实现Activity和Service都能很方便地调用对方的public方法。
其实只要让Activity和Service绑定之后,分别拥有对方的引用就可以了。
以MainActivity和MyService为例
创建一个服务类MyService.java
public class MyService extends Service {
private MainActivity activity;
@Override
public IBinder onBind(Intent arg0) {
return new MyBinder();
}
/**
* 与activity绑定后返回的Binder
*/
public class MyBinder extends Binder {
// 获取service对象的引用
public MyService getService() {
return MyService.this;
}
}
public void setActivity( MainActivity _activity){
this.activity = _activity;
}
}
让Service中拥有一个Activity类型的成员,并提供setActivity()方法
注意要在androidManifest中声明该Service
<service
android:name=".MyService"
></service>public class MainActivity extends Activity {
// 本地服务
private MyService mLocalService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bindLocalService();
}
/**
* 创建并绑定本地Service
* */
private void bindLocalService() {
Intent bindIntent = new Intent(this, MyService.class);
bindService(bindIntent, localServiceConnection, BIND_AUTO_CREATE);
}
/**
* 绑定本地服务的ServiceConnection类
*/
ServiceConnection localServiceConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName arg0) {
mLocalService = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MyBinder myBinder = (MyService.MyBinder) service;
mLocalService = myBinder.getService();
mLocalService.setActivity(MainActivity.this);
}
};
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MyBinder myBinder = (MyService.MyBinder) service;
mLocalService = myBinder.getService();
mLocalService.setActivity(MainActivity.this);
}这样一来,就可以调用对方里的public方法了
比如
1. MyService里有一个方法
public void print(String s){
System.out.println("is in service --> "+s);
}mLocalService.print("call from activity");public void updateTextView(String s){
textView.setText(s);
}activity.updateTextView("service call the fun in activity");
public static Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
System.out.println("handler say something");
}
};private Handler mHandler = MainActivity.handler;
还有用广播Broadcast来实现Service通知UI更新的,不过这样消耗太大,不建议这么做
上面的做法,即实现了Service与Activity的交互,也让这两个类的尽量独立解藕,方便类的维护。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:绑定service
原文地址:http://blog.csdn.net/guige_csdn/article/details/47809895