Android四大组件之Service(服务)

什么是Service

  • Service是Android中实现程序后台运行的解决方案,它适用于去执行一些不需要与用户进行交互但是需要长期执行的任务
  • Service的运行不依赖于Activity,即使启动Service的这个Activity切换到后台,Service依旧不会停止。那么Service是依赖于什么呢,它依赖于创建Service所在的那个应用程序进程,当这个进程被杀掉后,所有依赖于这个进程的Service都会停止运行。还有要注意的一点是,Service是运行在主线程中的,如果想在Service中进行耗时操作,需要创建子线程

Service有哪些应用场景

  • 上面说到了,Service一般用于执行一些不需要与用户进行交互但是需要长期执行的任务,例如下载资源,还有音乐播放器的后台播放等

Service的启动方法

  • Service的这两种启动方式有什么区别呢。通过startService方式启动的Service,一旦启动了,那么这个Service就与启动Activity无关了,即使这个Activity切换到后台,Service也不会停止运行。而通过bindService启动的Service则不同,看名字我们就知道,这是绑定服务的意思,也就是说,我通过Activity启动了一个Service,那么这个Service就和我Activity绑定了,当我Activity切换到后台停止运行的时候,这个Service同样会停止运行。这就是这两种方式启动的差别
  • 下面就来通过实例看看具体的操作会产生什么样的效果以及它们的生命周期

startService方式启动Service

  • 创建一个类继承Service并实现onBind方法,这里使用的是app包下的
public class MyStartService extends Service {
   
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}
  • onBind方法由于我们是使用startService方式启动的,所以不需要管,使用bindService方式启动同样也用不到
  • 然后我们重写onStartCommand方法,在onStartCommand这个方法里写我们需要执行的操作,这里我们写一个从0到9的循环输出操作,创建一个子线程
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                int count = 0;
                while (count < 10) {
                    Log.e(TAG, "run: -------" + count);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    count++;
                }
            }
        }).start();
        return super.onStartCommand(intent, flags, startId);
    }
  • 好了,Service的代码我们已经写完了,下面我们就在AndroidManifest.xml中注册这个Service,在<application></application>中写入下面代码
<service android:name=".MyStartService"></service>
  • 注册已经搞定了,那我们就来使用一下这个Service吧,创建一个Activity,在布局中添加两个按钮用于启动和停止Service
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ServiceActivity">

    <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值