版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ye1714505125/article/details/50904525
一、Service启动方式有两种,一种startService() ,一种bindService(),两者除了生命周期有不同之外,还有本质的不同
1、startService 的进程是服务进程 ,bindService是前台或者后台Service,与activity同进程,一旦activity退出,则bindservice也会退出;
2、bindService启动,其中有三个参数,第二个参数很重要,ServiceConnected类,创建一个类继承该类时,实现的方法可以访问BindService的Ibinder接口对象,利用多态,便可访问里面的方法;-----------bindService()设置内部代理类间接访问内部数据;
一、Service代码
public class ServiceTest extends Service { @Nullable @Override public IBinder onBind(Intent intent) { //返回一个Binder对象 return new ZhouMiShu(); } public class ZhouMiShu extends Binder{ public void QianXian(){ banZheng(); } } public void banZheng(){ System.out.print("大胖子"); } }
二、主代码:
public class MainActivity extends AppCompatActivity { Intent intent; ServiceTest.ZhouMiShu zhouMiShu; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent=new Intent(); intent.setClass(this, ServiceTest.class); bindService(intent, new MyConnection(),BIND_AUTO_CREATE ); } public void click(View view){ //调用服务中间人的牵线方法从而得到牵线的办证方法 zhouMiShu.QianXian(); } class MyConnection implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { //获取继承Binder类的中间对象 zhouMiShu= (ServiceTest.ZhouMiShu) service; } @Override public void onServiceDisconnected(ComponentName name) { } } }