android Service 简析

Service是 Android 四大组件之一。主要有两个使用场景:后台运行和跨进程访问。
Service的运行不依赖与任何用户界面,可以在后台长期运行,即使程序被切换到后台甚至打开另一个应用程序,Service 仍然可以继续保持正常运行,但是需要注意 Service 默认是运行在 UI 线程的,所以如果需要在 Service 中运行耗时操作需要开一个新线程,否则可能会引发 ANR。
此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信 (IPC)。

一、Service的启动方式:

  • 启动
    通过 startService 启动
    Intent intent = new Intent(this, MyService.class);
    startService(intent);
    可以看到Service 已经运行了。在这里插入图片描述
    当组件用 startService()启动服务时,服务就处于“启动”状态。一旦通过这种方式启动的服务会在后台无限期的运行,即使启动它的组件销毁也不受影响。除非是整个应用销毁了或者系统必须回收内存了。
    下面我们来验证一下。我们写两个 Activity:MainActivity和 ServiceActivity。我们从 MainActivity 里面跳转到ServiceActivity,在ServiceActivity启动 Service,然后再返回 MainActivity。

MainActivity
在 MainActivity中点击 START SERVICE ACTIVITY 按钮进入ServiceActivity
ServiceActivity
在ServiceActivity中点击 STSRT SERVICE 启动服务可以看到
启动服务
服务已经启动并在后台运行。现在我们点击返回键回到 MainActivity,再看下回到 MainActivity
回到 MainActivity
在这里插入图片描述
我们看到Service依然在后台运行。也就验证了我们上面所说的。
startService()启动的服务通常执行单一的操作,且不会将结果返回给调用方。

  • 绑定
    当组件通过bindService()绑定到服务时,服务处于“绑定”状态。绑定服务提供了一个客户端-服务的接口,允许客户端和服务端进行交互、发送请求、获取结果,甚至可以通过IPC跨进程进行这些操作。仅当与组件绑定时绑定服务才运行,多个组件可以绑定到同一个服务,一旦服务与所有组件取消绑定时,系统便会销毁该服务。具体验证在后面讲到服务到生命周期时会进行代码验证。

  • 启动并绑定
    服务既可以启动也可以绑定,此时当服务与所有组件取消绑定时,服务并不会停止,具体如何停止服务后面会说到。

二、Service生命周期

官方说明图
Service生命周期
1、通过 startService()启动的服务的生命周期
1)、首先我们建一个 MyService 类继承 Service

public class MyService extends Service {

    private final static String TAG = MyService.class.getName();
    
    public MyService() {
        super();
        Log.i(TAG, "MyService Constructor");
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(TAG, "MyService onCreate");
    }

    @Override
    public int onStartCommand(Intent intent, int 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值