Activity访问Service内部方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 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) {

        }
    }

}


猜你喜欢

转载自blog.csdn.net/ye1714505125/article/details/50904525