Android中Service概述

Service是Android中一种很重要的组件,一般来说有两种用途:用Service执行长期运行的操作,并且与用户没有UI界面的交互;某个应用程序的Service可以被其他应用程序的组件调用以便提供更广泛的使用。要想使得自己写的Service能够正常运行,必须在AndroidManifest.xml中通过标签注册Service,类似于通过标签注册Activity一样。有两种方式使用Service,一种是通过Context类的startService方法启动Service,另一种是通过Context类的bindService方法启动Service。

需要注意的是,与其他的应用程序组件一样,Service默认情况下是运行在其所在宿主进程的主线程中的。也就是说如果我们在Service要做一些CPU密集型操作(比如播放MP3)或阻塞式操作(比如网络请求),那么主线程就会卡死,出现ARN(Application Not Responding)程序无响应现象,为了解决这种问题,我们应该在Service中创建一个新线程,然后将这些耗时操作放入到该新创建的线程中去执行,这样不会阻塞主线程。

为了搞明白Service是什么,我们首先要知道Service不是什么:

a. 首先Service不是另一个独立的进程。 Service不会自己开辟一个新的进程,除非特别指定,默认情况下Service是运行在应用程序所属的进程中。

b. Service不是另一个新线程。Service的操作都是在主线程中执行的,为了避免阻塞主线程,在Service中应该将耗时操作放入到一个新线程中执行。

通过上面的描述我们知道,Service其实很简单(没有开创新的进程和新的线程),Service提供了以下两个主要的特性:

a. 作为应用程序的一部分运行在后台,并且甚至不需要和用户进行交互。这种情况下,我们一般调用Context的startService方法(比如在Activity中调用startSerivce方法)启动service。

b. 作为某个应用程序的组件暴露出去,使得其他的应用程序可以调用该Service。这种情况下,我们一般调用Context的bindService方法,比如我们有两个应用App1和App2,在App1中我们有一个Service叫做App1Service,在App2中我们有一个Acitivity叫做App2Activity,即便App1没有启动,我们在App2的App2Activity中也可以通过调用bindService启动App1中的App1Service,并且通过调用bindService之后,在Service和调用者之间会建立连接进行程序间交互。

后续会写文章分别介绍startService与bindService的使用示例以及生命周期。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-06 13:13:25

Android中Service概述的相关文章

【Android】Android中Service类onStartCommand的返回值有关问题(转)

@Override public int onStartCommand(Intent intent, int flags, int startId) { System.out.println("---------->>onStartCommand2"); return super.onStartCommand(intent, flags, startId); } Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象

Android中Service的一个Demo例子

Android中Service的一个Demo例子  Service组件是Android系统重要的一部分,网上看了代码,很简单,但要想熟练使用还是需要Coding.  本文,主要贴代码,不对Service做过多讲解.  代码是从网上找的一个例子,Copy下来发现代码不完全正确,稍微修改了下.  AndroidManifest.xml <application android:icon="@drawable/ic_launcher" android:label="@stri

Android中Service生命周期

这几天面试的时候,反复被问到一个关于Service的问题. 之前做了一个APP.有一个应用场景是,需要开机启动一个Service,在Service中另开一个线程,去对比用户配置中的时间,作出及时提醒. 然后面试的时候在描述该做法时就被问到一个问题,如果Service被系统或者其他应用kill了怎么办?我当时的回答是,在onDestroy中去处理.面试官说,onDestroy并不会被调用. 面试的详情暂且不表,在后期会专门写面经.现在讨论这个问题,Service被kill后生命周期是怎样的. OK

Android中Service类onStartCommand的返回值问题

Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStartCommand方法中做一些处理.然后我们注意到这个函数有一个int的返回值,这篇文章就是简单地讲讲int返回值的作用. 从Android官方文档中,我们知道onStartCommand有4种返回值: START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但

Android中Service的详细解释与使用

Android中Service的详细解释与使用: 概念: (1).Service可以说是一个在后台运行的Activity.它不是一个单独的进程,它只需要应用告诉它要在后台做什么就可以了. (2).它要是实现和用户的交互的话需要通过通知栏或者是通过发送广播,UI去接收显示. (3).它的应用十分广泛,尤其是在框架层,应用更多的是对系统服务的调用. 作用: (1).它用于处理一些不干扰用户使用的后台操作.如下载,网络获取.播放音乐,他可以通过INTENT来开启,同时也可以绑定到宿主对象(调用者例如A

(六)Android中Service通信

一.启动Service并传递参数 传递参数时只需在startService启动的Intent中传入数据便可,接收参数时可在onStartCommand函数中通过读取第一个参数Intent的内容来实现 1.MainActivity.java package com.example.shiyanshi.serviceconnected; import android.app.Activity;import android.content.Intent;import android.os.Bundle

Android中Service的使用

我个人的理解是:我们平时使用的android系统的app的后台应用,就是这个原理 可以利用Service实现程序在后台运行,依照这个原理,可以通过Service来实现关键代码的运行与实现. <一>下面大体说一下我在极客学院跟着视频做的一个Service的小实现 1,首先点击左上角file->new往下拉,看到一个Service,创建MyService.java 这个就是我们的Service服务. 后续可以在这其中添加想要在后台运行的关键代码等. 2,首先创建项目后,在layout或中的x

android中Service使用详解

service用于长期在后台处理任务,而不需要对用户可见. service有2种基本的启动方式: startService():使用这种方式,来进行单一的任务,不需要返回结果给调用者 bindService():与上面的相反. 下面是一些关于服务的重要说明,非常值得详细了解的: 继承service,实现自己的service: 在manifest中声明service,服务位于主线程,并不会创建自己的子线程. 下面是一些重写的方法: onCreate();当服务被创建时调用,只调用一次. onSta

Android中Intent概述及使用

Android中的Intent是一个非常重要且常用的类,可以用来在一个组件中启动App中的另一个组件或者是启动另一个App的组件,这里所说的组件指的是Activity.Service以及Broadcast. Intent的用途 Intent主要有以下几种重要用途: 1. 启动Activity:可以将Intent对象传递给startActivity()方法或startActivityForResult()方法以启动一个Activity,该Intent对象包含了要启动的Activity的信息及其他必