android app.Service 关键问题

android中service分两种,local/remote;
local service为本地同acivity进程内service,local service随activity同时结束生命;
remote service与activity在不同进程中,其生命的结束与activity生死无关;

service使用时,需要在AndroidManifest.xml进行声明,process=”:remote”即为remote service

<service android:name="com.qijie.studyservice.MyLocalService"/>
<service android:name="com.qijie.studyservice.MyRemoteService" android:process=":remote"/>

Service的实现需继承android.app.Service,重载onBind方法:

    @Override
    public IBinder onBind(Intent arg0) {
        android.os.Messenger messenger = new Messenger (new Handler() {           
            @Override  
            public void handleMessage(Message msg) { 
                //消息处理;
            }
        ); 
        return messenger.getBinder();
    }

android.os.Messenger可以实现activity与Service的通信,但对于local Service来讲,这样做显然相对麻烦,因为local Service与Activity在相同进程,我们可以在重载onBind方法时返回一个继承自Binder的对象即可;

    @Override
    public IBinder onBind(Intent arg0) {
        return new LocalBinder();
    }

    public class LocalBinder extends Binder {  
        public LocalService getService() {  
            return LocalService.this;  
        }
    }

service调用有两种方式:
startService/stopService方式,用于启动和停止服务运行,但无法与Service进行通信;
bindService/unbindService方式,可以实现activity与Service的数据通信,注意在activity退出时必须调用unbindService方法与Service解除绑定;

  1. remote service调用过程:
    startService:
         ->onCreate()->onStart();

    stopService:
        if not bind then 
            onDestory();
        else if was bind then 
            just return;

    bindService:
        onCreate()->onBind();
    unbindService:
        if not start service then 
            onUnbind()->onDestory();
        else if started service then 
            just onUnbind();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白錵錵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值