Activity访问Service内部方法

来源:互联网 发布:淘宝假冒申诉 编辑:程序博客网 时间:2024/06/06 03:44

一、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) {        }    }}


0 0
原创粉丝点击