Android开发——Service基础开发

Service是Android四大组件之一,用于后台运行任务而无需用户界面交互。它有两种创建方式:通过start方法启动,执行onCreate、onStartCommand、onDestroy流程;或者使用Binder进行绑定,启动时不执行startCommand,而是onBind进行数据交换和通信。Service在主线程中运行,处理耗时操作时需创建新线程。
摘要由CSDN通过智能技术生成

Service基础开发

为什么要有Service?

Service作为Android开发的四大组件之一其存在肯定是有其原因的。对于Activity来讲,其生命周期为create, start, resume, pause, restart, stop, destroy几个阶段,但是当位于activityA时按home键返回桌面时此时的activityA会先后经历pause和stop阶段,这也就表示此时的activityA已经不工作了。就像一个音乐播放器返回桌面后他就不播放音乐了。Service正式用于解决此类问题而产生的。Service不依赖于任何用户界面也就意味着不和用户进行交互。
在Android源码中对Service的解释为:

A Service is an application component representing either an application’s desire
to perform a longer-running operation while not interacting with the user
or to supply functionality for other applications to use. Each service
class must have a corresponding{@link android.R.styleable#AndroidManifestService <service>}declaration in its package’s AndroidManifest.xml.

并添加补充:

Note that services, like other application objects, run in the main thread of their hosting process. This means that, if your service is going to do any CPU intensive (such as MP3 playback) or blocking (such as networking) operations, it should spawn its own thread in which to do that work. More information on this can be found in Processes and Threads.

大致意思就是Service是默认泡在UI线程里的,如果你要设置的服务要办的事比较多的话或者要进行比如网络相关的耗时的操作时最好新建一个线程。

Service的两种创建方法

不论哪种方法都需要现在AndroidManifest中先定义Service

  1. Start
    start方法启动服务: onCreate -> onStartCommand -> running -> onDestroy -> shutDown

    首先在activity中添加语句用于启动服务:
    startService(new Intent(Activity.this, Service.class));
    接下来实现Service的具体内容:

@Override
    public void onCreate() {
        super.onCreate();
        mediaPlayer = MediaPlayer.create(this, R.raw.clsr);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        mediaPlayer.start();
        return START_NOT_STICKY;
    }

    @Override
    public void onDestroy() {
        mediaPlayer.stop();
        super.onDestroy();
    }

启动服务后先运行onCreate然后执行StartCommand。

停止服务则运行

stopService(new Intent(Activity.this, Service.class));

可直接调用onDestroy方法

  1. Binder

Binder相对于Start方法来启动服务多出了绑定和解绑的工作,binder相对与start来说最大的区别就是不执行startCommand方法了,在执行bindService(new Intent(Activity.this, Service.class), serviceConnection, BIND_AUTO_CREATE);时在将活动和服务绑定的同时也相应的启动了Service的onCreate方法,但并不继续执行startCommand而是去执行onBind方法,该方法返回一个Binder对象至活动中,在活动中新建的ServiceConnection的onServiceConnected方法接受此返回值,并进一步得到Service。而service类中可以有一些公共的方法用于服务和活动之间的数据交换和通信。

对于ServiceConnection的两个构造方法onServiceConnected和onServiceDisconnected,前者是绑定的时候调用,但是后者并不是解绑的时候调用的,而是注入服务器崩溃,内存不足等原因引起的非正常解绑的情况下调用的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值