第九周安卓开发学习总结(3)

写在前面

这段时间主要学习了安卓四大组件中很重要的一个组件:服务(service)。到此,四大组件已经学完了三个了,还有一个内容提供者(Content Provider),暂且延后。接下来的几天专心项目的开发。
本文所有代码github地址:https://github.com/wushenjiang/ServiceDemo

服务介绍

在安卓中,服务有着和Activity相似的地位。不过Activity是在前台运行,而Service是在后台运行的,不可见的。Service的使用其实非常普遍。许多APP都用到了服务。考虑到可能为我们的APP添加推送功能,才花费了大把时间学习了Service。

服务的启动方式

服务的启动方式主要有两种:startService和bindService,以下分别介绍:

startService方法启动

首先来看方法:

    public void startServiceClick(View v) {
        Intent intent = new Intent();
        intent.setClass(this, FirstService.class);
        startService(intent);
    }

我们需要传入一个intent即可启动服务,对应的,停止服务的方法:

   public void stopServiceClick(View v) {
        Intent intent = new Intent();
        intent.setClass(this, FirstService.class);
        stopService(intent);

    }

同样的,也需要传入一个intent对象。

bindService方法启动Service对象

直接看代码:

    public void bindServiceClick(View v) {
        Intent intent = new Intent();
        intent.setClass(this, FirstService.class);
        mIsServiceBinded =  bindService(intent,mConnection,BIND_AUTO_CREATE);
    }
private ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            Log.d(TAG,"onServiceConnected...");
            mICommunication =(ICommunication) service;
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            Log.d(TAG,"onServiceDisconnected...");
            mICommunication = null;
        }
    };

与startService不同的是,使用BindService需要传入一个ServiceConnection对象。我们直接在方法中创建他即可。
那么我们再来看看解绑的方法:

   public void unbindServiceClick(View v) {
        if (mConnection != null) {
            unbindService(mConnection);
        }

    }

只需传入一个ServiceConnection方法即可。

两种方法的优缺点

* 服务的开启方式有两种:
 * 1、startService-->stopService
 * 这种启动方式的优点:服务可以长期存在于后台运行
 * 缺点:不能够进行通讯
 * 生命周期:
 * 最基本的生命周期:
 * onCreate()-->onStartCommand()-->onDestroy();
 * 如果服务已经启动,就不再创建(onCreate)了,除非执行了onDestroy();
 * 2、 bindService 绑定服务,如果没有启动,自动启动
 * -->UnbindService 解绑服务
 * 优点:可以进行通讯。
 * 缺点:不可以长期处于后台运行。如果不解绑将发生泄漏leak
 * 如果解绑了服务将停止运行.
 * 生命周期:
 * onCreate()-->onBind()-->onUnBind()-->onDestroy();

混合启动方式

 * 混合开启服务的生命周期
 * 1.开启服务,绑定服务.如果不取消绑定那么无法停止服务
 * 2.开启服务后,多次绑定-解绑服务,服务不会被停止,只能通过stopService()来停止
 * 推荐的混合开启服务方式:
 * 1 开启服务-->为了确保服务尅长期于后台运行
 * 2、绑定服务-->为了可以进行通讯
 * 3、调用服务内部的方法,如控制音乐播放器的播放/暂停/停止/快进
 * 4、退出Activity要记得解绑服务-->释放资源
 * 5、如果不使用服务了要让服务停止,那么就调用stopService()
 */

使用混合启动方式编写一个简易的音乐播放器

代码都已放到最上面的github链接,需要的可以去看看。这里不再详细说了。

第九周安卓开发学习总结(3)

上一篇:02如何直接使用uni-app中提供的模板之公告滚动


下一篇:【终端使用】"mv"命令,文件的移动或重命名