android中bindService的使用

发布时间:2016-12-10 12:58:52 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"android中bindService的使用",主要涉及到android中bindService的使用方面的内容,对于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); } }

上一篇:Caused by: java.util.ConcurrentModificationException
下一篇:[email protected]

相关文章

相关评论