Android 四大组件之Service的基本使用

时间:2022-12-21 11:37:05

最近自己在做一个小型音乐播放器,其中,有用到服务相关的知识,于是参考郭大神的《第一行代码》进行一些读书笔记的整理。

服务

服务主要用于处理程序的后台,主要执行那些不需要和用户交互并且需要长期运行的任务。只要后台不关闭该程序,那么该程序所有相关的服务都会保持正常运行。
服务并不是运行在一个独立的进程当中,而是依赖于创建服务时所在的应用程序进程。当某个应用程序进程被杀掉时,所有依赖于该进程的服务也会停止运行。
在上次项目中需要做一个倒计时,当时提出的项目需求是当该程序退出时,倒计时依然需要存在,并且依旧在进行倒计时。因为第一次对服务的概念不是很清楚,就说用服务来实现。目前“唯品会”中订单有倒计时,但是在关闭程序后,没有找到与其相关的后台服务,说明它的倒计时不是使用服务来实现的。其主要原因应该就是在服务中,如果退出该应用程序,则相关的服务也全部退出,自然,所谓的倒计时也就不存在了。后来是通过计算订单时间的差值实现这个倒计时的功能。

服务的使用
定义一个服务

一个服务继承Service类,自动需要重写IBinder方法,则说明Service本身是一个抽象类。

public class MusicService extends Service {
@Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
        }
}

接着我们需要在服务中处理一些事情,那处理事件的逻辑该如何实现呢?则我们可以重写Service 的其他方法。

@Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        mContext = this;
    }
@Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d("MyService", "onStartCommand executed");

        return super.onStartCommand(intent, flags, startId);
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d("MyService", "onDestroy executed");
    }

一般我们希望服务启动之后立刻去执行某个动作,主要将逻辑写在onStartCommand()这个方法中。当服务销毁时,应该在 onDestroy()方法中回收不再使用的资源。

注册

每一个服务都应该在AndroidManifest文件中进行注册才会生效,注册该服务时需包含在application组件中。

启动和暂停服务

启动服务和暂停服务均借助于Intent来实现

Intent startIntent = new Intent(this, MyService.class);
startService(startIntent);
stopService(startIntent);

当然,这只是有关服务知识的冰山一角,还有绑定服务和解绑服务的知识,这还需要自己再深入的理解。