使用bindService和服务的通信(bindService和startService的区别)
2011-12-24 15:30
471 查看
//目录结构
运行效果
//使用Context.bindService();和Context.startService()的区别:
binService启动的Service是和Activity绑定了,也就是说通过当前Activity启动的Service会随着当前的Activity 变化而变化,如果当前Activity卦了,那么这个通过bindService打开的Service也会卦掉,而通过startService()启动的服务则不会,它会一直在后运行着,如果第二次再启动它的话,它会执行onRestart方法,而不会去执行onCreate方法
来看一下代码
//BindStartDemoActivity.java
运行效果
//使用Context.bindService();和Context.startService()的区别:
binService启动的Service是和Activity绑定了,也就是说通过当前Activity启动的Service会随着当前的Activity 变化而变化,如果当前Activity卦了,那么这个通过bindService打开的Service也会卦掉,而通过startService()启动的服务则不会,它会一直在后运行着,如果第二次再启动它的话,它会执行onRestart方法,而不会去执行onCreate方法
来看一下代码
//BindStartDemoActivity.java
package sn.len.bindstart; import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class BindStartDemoActivity extends Activity implements OnClickListener { private Button key; private TextView value; private IService iservice; private myService conn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); key=(Button)findViewById(R.id.key); key.setOnClickListener(this); value=(TextView)findViewById(R.id.value); //当Activity一创建的时候就开始和service绑定 /** * Context.startService()不能和服务通信 * Context.bindService(service,conn,1);可以和服务通信 * conn主要是和service连接的桥梁,如果连接上会主动调用onServiceConnected方法 */ Intent service=new Intent(BindStartDemoActivity.this,BindService.class); conn=new myService(); bindService(service, conn, 1); } @Override public void onClick(View v) { value.setText(iservice.getName()); } private final class myService implements ServiceConnection { /** * IBinder service主要就是返回BindService类的,onBind实例 */ @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.i("info", "onServiceConnected"); iservice=(IService)service; } //断开连接 @Override public void onServiceDisconnected(ComponentName name) { Log.i("info", "onServiceDisconnected"); iservice=null; } } //当Activity销毁的时候也就是解除绑定 @Override protected void onDestroy() { Log.i("info", "onDestroy"); unbindService(conn); super.onDestroy(); } }//BindService.java
package sn.len.bindstart; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; public class BindService extends Service { /*1,返回IBinder,所以得开个,实现了IBinder接口的类 Binder implments IBinder 2,但因这样在返回,而调用参数则get不出来,所以还得弄个接口IService */ Binder binder=new MyBinder(); @Override public IBinder onBind(Intent intent) { return binder; } public String getName() { return "已经拿到Service里面的值啦,这是使用bindService和服务的通信"; } class MyBinder extends Binder implements IService { public String getName() { return BindService.this.getName(); } } }//IService.java
package sn.len.bindstart; public interface IService { String getName(); }
相关文章推荐
- 【Android四大组件之Service】(二)Android中Service的使用详解和注意点(LocalService),及startService与bindService的区别
- Service使用:BindService和StartService的小区别
- startService()和bindService()区别(转载)
- startService和bindService的区别
- 启动service的两种方式:startService与bindService的区别
- Service中的startService或者bindService的区别
- startService与bindService的区别
- service使用以及startService,stopService,bindService,unbindService方法比较
- StartService与bindService的区别
- Android之startService与bindService的区别
- Android 服务之startService和bindService以及前台服务的创建
- 使用service的startservice 和bindservice方法实现音乐的播放、暂停、继续
- BindService与StartService的综合使用案例
- android service startService与bindService的区别
- Android使用bindService启动服务
- [AndroidTips]startService与bindService的区别
- 混合使用startService与bindService时的情况
- startService与bindService的区别
- 服务启动方式三-使用bindService方式启动服务
- 【Android 界面效果34】Android里Service的bindService()和startService()混合使用深入分析