四大基本组件之Services

本文详细介绍了Android中的Services概念及其用途,包括后台音乐播放等典型应用场景。同时讲解了如何使用Context.startService()和Context.bindService()两种启动方式,并对比了它们的不同生命周期。
摘要由CSDN通过智能技术生成
什么是Services,Services什么用?
Services是 在后台运行,没有可视化的用户界面的程序。 (Android系统现已经不允许只有 Services 的Android程序了,所以一个Android应用 必须要有界面( 有Activity )才能正常运行
最容易理解的实例就是音乐播放器。如果把播放音乐的代码写在Activity里是不行的,当点击播放后退出界面到别的应用时音乐就不能继续播放了 ,因为 Activity变得不可见了。 后台播放音乐,这时 就需要用 Services了

如何用Services
有两种方法启动 Services服务程序,一种是通过 Context.startService()来启动(通过调用 Context.stopService()结束 );另一种是 通过 调用Context.bindService()方法建立( 调用 Context.unbindService()关闭 ),两种方法不同在于第二种调用要附着在别的程序上,比如mainActivity, Service通过暴露接口和 mainActivity协同工作。同样用 音乐播放器的实例 来说明, Service暴露 接口 暂停、回退、停止等等播放音乐的接口给 Activity从而让用户控制播放

两种不同方法启动的 Services生命周期是不一样的:

void onCreate()
void onStart(),这个方法已经是不推荐使用的了
取代的应该是onStartCommand()这个方法
void onDestroy()
IBinder onBind(Intent intent)
boolean onUnbind(Intent intent)
void onRebind(Intent intent)

onCreate()和onDestroy()方法在两种生命周期中都有,也是做初始化和首尾的工作。
主要不同点在于用Context.bindService()启动的服务的生命周期中有 onBind(),这里可以将设置好的信息传递给 Service ,而 onUnbind()则可以可以将 Services得到的结果返回回去,l另外通过调用 onRebind()则可以继续进行 Service

不过要注意的是虽然用生命周期可以这么吧Service分为两种,但其实任何服务都可以接受onBind()和onUnbind()调用,两种生命周期是可能混杂在一起的。

这里可以继续使用日志工具进行理解熟悉。
新建一个MyService类
(智能的Android-Studio已经帮我们自动设置好了清单中的配置,这是建立所Activity和Service所必须的

写一些生成日志的代码
@Override
    public void onCreate() {
        super.onCreate();
        Log.d("running", "Service onCreate() running");
    }
 
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d("running", "Service onStartCommand() running");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        Log.d("running", "Service onBind() running");
        throw new UnsupportedOperationException("Not yet implemented");
    }
 
    @Override
    public boolean onUnbind(Intent intent) {
        Log.d("running", "Service onUnbind() running");
        return super.onUnbind(intent);
    }
 
    @Override
    public void onRebind(Intent intent) {
        Log.d("running", "Service onRebind() running");
        super.onRebind(intent);
    }
 
    @Override
    public void onDestroy() {
        Log.d("running", "Service onDestroy() running");
        super.onDestroy();
    }


然后在Main Activity中启动这个MyService
 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Log.e("running", "Activity onCreate() running");
        Intent intent = new Intent(this, MyService.class);
        startService(intent);
        stopService(intent);
    }
通过绑定启动service的代码比较麻烦,先略过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值