安卓

来源:互联网 发布:乐视mac码为啥不正确 编辑:程序博客网 时间:2024/04/26 01:20

可交互的后台服务是指前台页面可以调用后台服务的方法,可交互的后台服务实现步骤是和不可交互的后台服务实现步骤是一样的,区别在于启动的方式和获得Service的代理对象

一、创建服务类

和普通Service不同在于这里返回一个代理对象,返回给前台进行获取,即前台可以获取该代理对象执行后台服务的方法

public class BackGroupService extends Service {    /**     * 綁定服务时调用     *     * @param intent     * @return     */    @Nullable    @Override    public IBinder onBind(Intent intent) {        Log.e("Service", "onBind");        //返回代理对象        return new MyBinder();    }    /**     * 代理类     */    class MyBinder extends Binder {        public void showToast() {            Log.e("Service", "showToast");        }        public void showList() {            Log.e("Service", "showList");        }    }    /**     * 解除绑定服务时调用     * @param intent     * @return     */    @Override    public boolean onUnbind(Intent intent) {        Log.e("Service", "onUnbind");        return super.onUnbind(intent);    }    /**     * 服务创建时调用     */    @Override    public void onCreate() {        Log.e("Service", "onCreate");        super.onCreate();    }    /**     * 服务被销毁时调用     */    @Override    public void onDestroy() {        Log.e("Service", "onDestroy");        super.onDestroy();    }}

二、配置服务

<service android:name=".Service.BackGroupService"/>

三、绑定服务和解除绑定服务

我们通过两个按钮分别演示绑定服务和解除绑定服务,通过bindService()开启服务,通过unbindService()停止服务

public class MainActivity extends AppCompatActivity {    Button bt_open, bt_close;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        bt_open = (Button) findViewById(R.id.open);        bt_close = (Button) findViewById(R.id.close);        final Intent intent = new Intent(this, BackGroupService.class);        bt_open.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                bindService(intent, conn, BIND_AUTO_CREATE);            }        });        bt_close.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                unbindService(conn);            }        });    }    ServiceConnection conn = new ServiceConnection() {        @Override        public void onServiceConnected(ComponentName name, IBinder service) {            //拿到后台服务代理对象            BackGroupService.MyBinder myBinder = (BackGroupService.MyBinder) service;            //调用后台服务的方法            myBinder.showToast();            myBinder.showList();        }        @Override        public void onServiceDisconnected(ComponentName name) {        }    };}

这里和startService的区别在于多了一个ServiceConnection对象,该对象是用户绑定后台服务后,可获取后台服务代理对象的回调,我们可以通过该回调,拿到后台服务的代理对象,并调用后台服务定义的方法,也就实现了后台服务和前台的交互

四、运行代码

运行程序后,我们点击绑定服务,然后一段时间后解除绑定服务。我们以Log信息来验证Service的生命周期:onCreate->onBind->onUnBind->onDestroy,其中也可以看到我们调用后台服务的方法showToast和showList。


0 0
原创粉丝点击