标签:绑定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