Android服务

Android-Service组件及demo学习 在Android中,Service是一个用来执行长时间运行且没有用户界面的操作的组件。它可以在后台执行任务,即使用户切换到其他应用程序也不会被中断。Service通常用于执行不需要与用户交互的操作,如下载文件、播放音乐等。 阅读详情

android中服务是运行在后台的东西,级别与activity差不多。既然说service是运行在后台的服务,那么它就是不可见的,没有界面的东西。你可以启动一个服务Service来播放音乐,或者记录你地理信息位置的改变,或者启动一个服务来运行并一直监听某种动作。

Service和其他组件一样,都是运行在主线程中,因此不能用它来做耗时的请求或者动作。你可以在服务中开一一个线程,在线程中做耗时动作。

那么究竟Service怎么使用呢?

老规矩,先来点基础知识。

一.基础知识

服务一般分为两种:

1:本地服务, Local Service 用于应用程序内部。在Service可以调用Context.startService()启动,调用Context.stopService()结束。在内部可以调用Service.stopSelf() 或 Service.stopSelfResult()来自己停止。无论调用了多少次startService(),都只需调用一次stopService()来停止。

2:远程服务, Remote Service 用于android系统内部的应用程序之间。可以定义接口并把接口暴露出来,以便其他应用进行操作。客户端建立到服务对象的连接,并通过那个连接来调用服务。调用Context.bindService()方法建立连接,并启动,以调用 Context.unbindService()关闭连接。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。
提供给可被其他应用复用,比如定义一个天气预报服务,提供与其他应用调用即可。

那么先来看Service的生命周期吧:如图:


context.startService() ->onCreate()- >onStart()->Service running--调用context.stopService() ->onDestroy()

context.bindService()->onCreate()->onBind()->Service running--调用>onUnbind() -> onDestroy() 从上诉可以知道分别对应本地的,,以及远程的,也对应不同的方式启动这个服务。

二.实战

我们可以定义一个本地服务继承Service,然后在这个服务里播放媒体播放器或者记录地理位置变化。通常有时候我们的Service要与Activity交互,那么可以可以定义一个内部类,返回这个Service,当然我们要考虑到如果是以绑定方式启动服务,那么内部类可以定义为继承Binder,然后返回本地服务,具体代码如下。

复制代码
package com.dongzi;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;

public class LocalService extends Service {

private static final String TAG = "LocalService";
private IBinder binder=new LocalService.LocalBinder();

@Override
public IBinder onBind(Intent intent) {

return binder;
}
MediaPlayer mediaPlayer=null;
@Override
public void onCreate() {
Log.i(TAG, "onCreate");
//这里可以启动媒体播放器
// if(mediaPlayer==null)
// mediaPlayer=MediaPlayer.create(this, uri);
super.onCreate();
}

@Override
public void onStart(Intent intent, int startId) {
Log.i(TAG, "onStart");
super.onStart(intent, startId);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "onStartCommand");
return START_STICKY;
}



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


//定义内容类继承Binder
public class LocalBinder extends Binder{
//返回本地服务
LocalService getService(){
return LocalService.this;
}
}


}
复制代码

我们可以从上面知道

 //定义内容类继承Binder
    public class LocalBinder extends Binder{
        //返回本地服务
        LocalService getService(){
            return LocalService.this;
        }
    }

可以返回这个服务,然后activity可以通过服务调用服务的方法了。

那么如何启动服务呢?从上面基础知识中,我们知道有2种方法,如下:

  //启动服务
private void startCustomService(){
Intent intent=new Intent(this,LocalService.class);
startService(intent);
}

第2种绑定方式:

复制代码
LocalService localService=null;
//用bindService方法启动服务
private void BinderService(){
Intent intent=new Intent(this,LocalService.class);
bindService(intent, new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName componentName, IBinder binder) {
//调用bindService方法启动服务时候,如果服务需要与activity交互,
//则通过onBind方法返回IBinder并返回当前本地服务
localService=((LocalService.LocalBinder)binder).getService();
//这里可以提示用户,或者调用服务的某些方法
}

@Override
public void onServiceDisconnected(ComponentName componentName) {
localService=null;
//这里可以提示用户
}
}, Context.BIND_AUTO_CREATE);
}
复制代码

在绑定服务的时候,需要一个服务连接对象,ServiceConnection,服务一旦连接,就会调用onServiceConnected方法,我们可以在这个方法里面返回我们的本地服务对象,具体看代码;而在服务断开时候会调用onServiceDisconnected方法,我们可以清理一些服务资源。

Android Service (模拟银行服务demo) 源码项目源码 模拟银行服务界面展示设计步骤+思想注意事项 界面展示 设计步骤+思想 目的:分为三种人:普通用户,银行员工,银行行长 设计步骤 第一步:定义接口 public class NormalUserImpl extends Binder implements INormalUserAction { public interface INormalUserAction { ... 阅读详情

相关推荐

【Android-Service】基于MVP的音乐播放器demo实现思路(附源码)

最近在学习service相关的内容,在该部分的学习过程中,根据学习视频中的内容进行了总结归纳,以下是音乐播放器demo的开发思路,具体步骤及源码: 有关MVP框架的内容可看: link. 实现效果: 实现思路: 新建布局,初始化控件,设置点击事件 新建两个接口,一个用来定义相关操作(控制逻辑层),一个用来控制UI 创建service,注册service,(此处采用混合开启service的方式)...

qq_40716430的博客 1058

Android服务之Service(其一)

android中服务是运行在后台的东西,级别与activity差不多。既然说service是运行在后台的服务,那么它就是不可见的,没有界面的东西。你可以启动一个服务Service来播放音乐,或者记录你地理信息位置的改变,或者启动一个服务来运行并一直监听某种动作。 Service和其他组件一样,都是运行在主线程中,因此不能用它来做耗时的请求或者动作。你可以在服务中开一一个线程,在线程中做...

dhvkvve3729的博客 246

安卓Android后台保活服务详解

Android后台服务的保活是一个复杂而重要的问题。通过合理使用前台服务、JobScheduler、AlarmManager、双进程保活和WorkManager等方法,可以在一定程度上提高服务的存活率。然而,开发者也需要意识到这些方法的局限性,并在实际应用中综合考虑多种因素进行优化。未来,随着Android系统的不断发展和完善,相信会有更多更高效的保活方法出现,为开发者提供更加便捷和可靠的解决方案。

2401_89048318的博客 1683

【Orangepi3 LTS】自动登录设置一些方法

Orangepi3 LTS自动登录设置一些方法

Sure_Brserker的博客 1744

安卓Android studio开发基础服务与广播功能的实现

安卓课上的第三个实验,对服务与广播功能的基本原理实现 即,模拟一个简单的功能页面,当默认状态下(没有短信接收时),一旦收到短信(相当于触发系统广播),激活改功能的音乐播放,此外,额外设定音乐播放的停止按钮作为功能的完善。 其中,【整体代码文件结构】: 其中,activity_main.xml的内容: 他构建的是一个按钮,在默认的时候是灰色,当有短信发送过来触发点亮,然后点击这个按钮再度变灰。 Mainactivity.java的内容: 在没有短信被接受时,按钮是默认的灰色,即iscast=false,

isukichan的博客 866

安卓无障碍服务实战

前言 安卓中的无障碍服务是个很强大的功能。这个服务本来是为了帮助有行动障碍的人群更加便利的使用手机而设计的。但在开发者们的脑洞大开下,人们经常使用无障碍服务来进行一些”骚操作“。 说到无障碍服务,之前我是不知道安卓无障碍服务能干这么多事的,因为我从开始学安卓开始,接触到的大多数教材里,别人写的博客里,大多数的内容都是四大组件及网络通信这方面的内容。包括工作后,掌握的安卓开发技术更多以后,在相当长的一段时间内我都是不知道安卓还有无障碍服务这么一个东西的,直到后来同事告诉我这么个东西,我才恍然大悟,原来什么自动

zlwnew的博客 6082

安卓毕业设计基于安卓android的健身服务应用APP

考虑到实际生活中在健身服务应用方面的需要以及对该系统认真的分析,将系统权限按管理员和用户这两类涉及用户划分。(1)用户功能需求用户用例图如图3-1所示。图3-1 用户用例图(2)管理员功能需求管理员登陆后,主要模块包括首页、个人中心、用户管理、健身课程管理等功能。管理员用例图如图3-2所示。图3-2 管理员用例图。

q_1262330535的博客 1156

安卓10源码开发定制(24)framework层自定义系统服务开发(1)Android Studio创建自定义系统服务

文章首发微信公众号:QDROID88888,如果感兴趣可以关注一下公众号。 前言 本文将实现读取"/sys/class/net/wlan0/address"文件的方式获取wifi mac为例实现在安卓10源码中添加framework层自定义系统服务。 安卓10中由于普通App直读取取"/sys/class/net/wlan0/address" 文件获取wifi mac失败。然而添加系统服务读取可以读取成功,主要是由于安卓10的安全机制中限制了普通app不能读取"/sys/clas...

xiaomaNo01的专栏 1072

delphi android服务,RAD STUDIO DELPHI创建安卓服务CREATING ANDROID SERVICES

创建Android服务Android服务是一个没有用户界面的应用程序,它执行后台任务。基本上有两种服务类型:开启服务:此服务由Android应用程序启动。即使应用程序关闭,服务也可以无限期地在后台运行。这种类型的服务通常执行单个任务,完成后自动停止。绑定服务:此服务仅在绑定到Android应用程序时才运行。应用与服务之间有相互作用,它保持活跃直到应用释放。多个应用程序可以绑定到同一个服务。创建An...

weixin_34206263的博客 984

Jlink除了调试还能干啥?用JFlash SPI给W25Q64烧录固件的5个实用技巧

本文深入探讨了Jlink的隐藏功能,特别是通过JFlash SPI高效烧录W25Q64的5个进阶技巧。从硬件连接优化到批量处理脚本,再到数据安全验证,这些技巧能显著提升烧录速度和稳定性,适用于量产环境。文章还提供了详细的参数配置和脚本示例,帮助工程师充分发挥Jlink的潜力。

weixin_29164843的博客 409

RANSAC地面点分割:从原理到C++实战优化

本文深入解析RANSAC算法在点云地面分割中的原理与C++实战优化,涵盖动态迭代次数、自适应阈值等关键技巧,通过并行计算和内存访问优化提升性能,适用于激光雷达点云处理。

weixin_29015051的博客 277

服务的作用android,简析安卓Android服务Service

前言平时的开发中,我们用的最多就是在Activity中进行开发。当我们需要处理一个耗时的逻辑的时候,为防止ANR我们会开启一个子线程来执行,例如网络请求等。但是当我们需要一个逻辑在后台持续运行,并且能和多个活动进行通信,例如后台播放器,子线程貌似就显得无能为力了。这个时候就需要用到服务了。顾名思义,他作为后台逻辑,为前台的Activity服务。接下来看看什么是服务。什么是service?简介服务S...

weixin_30061949的博客 1404

【逆向实战入门】Lua Hook进阶:从函数拦截到流程控制的实战解析

本文深入解析Lua Hook技术的进阶应用,从基础函数拦截到复杂流程控制,提供实战技巧与避坑指南。通过保存原函数指针、条件性Hook及调用栈分析等高级方法,帮助开发者在游戏辅助、自动化工具等场景中精准控制程序行为,同时确保稳定性和反检测能力。

weixin_30613343的博客 331

android 绑定服务 解绑服务,安卓案例:绑定和解绑服务

安卓案例:绑定和解绑服务一、运行效果 二、实现步骤1、创建安卓应用BindUnbindService 2、准备背景图片background.jpg,放到mipmap目录里 3、布局资源文件activity_main.xml xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android...

weixin_28724661的博客 988

RK3588 部署 YOLOv5s 实战:多线程加速从 16FPS 飙升到 120FPS(含性能优化)

因为RK3588包含了3个NPU核心,支持3个核心同时工作、双核合作、以及单核工作。我们可以使用线程池来加速。线程池是一种长街的并发编程模型,它用于管理和复用线程,以提高多线程程序的性能和效率。线程池通常包含以下主要组件:1、任务队列:任务队列用于存储待执行的任务。这些任务可以是函数、方法或其他需要多线程环境中执行的操作。2、线程池管理:线程池管理器负责创建、销毁和管理线程。它会监视任务队列中的任务,根据需要创建线程,执行任务,并在任务完成后将线程放回池中以供重用。

FJN110的博客 99

在ubuntu20.04中安装MATLAB时常见问题及解决方法

   如果你刚装完ubuntu20.04,这时你想要安装MATLAB2021A,在输入命令./install进行安装时,可能会报以下错误:    terminate called after throwing an instance of ‘JailContainerException’ what(): Error: 88: No JRE version parsed from/media/jzx/MATHWORKS_R2021A/sys /java/jre/glnxa64/jre/release   

慕羽★的博客 1万+

android如何与服务器,安卓如何与服务器通信 Android服务器通信

Android服务器通信的几种方式详解大 学学习网络基础的时候老师讲过,网络由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。通过初步的了解,小编知道IP协议对应于网 络层,TCP协议对应于传输层,而HTTP协议对应于应用层,三者从本质上来说没有可比性。Android客户端怎么与服务器数据库连接?不能与数据库连接的 Android客户端不能直接与服务器数据库连接。数据库是需要...

weixin_34849898的博客 1920

为什么先进工艺需要check那么多corner?

那么hold slack = launch clock path delay + data path delay - capture_clock_path_delay = -capture_clock_path_delay,也就是说,capture clock path delay越大,hold越难满足。而且,我们在设计的时候,一般clock频率都会过约,所以是有较大的margin的。有的foundry还会对rc的取值范围进行了约束,如cworst_T,采用的是1.5 sigma的取值范围。

芯冰乐 2087

android 创建服务,RAD STUDIO DELPHI创建安卓服务CREATING ANDROID SERVICES

创建Android服务Android服务是一个没有用户界面的应用程序,它执行后台任务。基本上有两种服务类型:开启服务:此服务由Android应用程序启动。即使应用程序关闭,服务也可以无限期地在后台运行。这种类型的服务通常执行单个任务,完成后自动停止。绑定服务:此服务仅在绑定到Android应用程序时才运行。应用与服务之间有相互作用,它保持活跃直到应用释放。多个应用程序可以绑定到同一个服务。创建An...

weixin_28917279的博客 467

华为OD机试2025C卷 - CPU调度策略 (C++ & Python & JAVA & JS & GO)

华为OD机试 2025C卷 CPU调度策略,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 1296

Pdu Router(PduR)模块

1. PduR路由基本功能 2. PduR总线网关功能 3. PduR缓存机制 4. 总结

weixin_43759043的博客 3849

android tv 蓝牙服务_安卓系统蓝牙服务com.android.bluetooth的使能

蓝牙系统服务层的使能流程分析蓝牙服务层的使能基础是其初始化完成,也就是AdapterService通过onBind()将AdapterServiceBinder上报给bind该服务的调用者。我们现在应该都知道在安卓系统中bind该服务的为BluetoothManagerService。本篇我们就从蓝牙服务管理收到bind的回调开启蓝牙使能流程的分析。熟悉安卓系统中bind服务机制的小伙伴应该都知道...

weixin_42347763的博客 797

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【安卓framework实战】实现一个安卓native服务

本文介绍了如何实现一个安卓native服务。 需求: 在native framework层实现一个服务接受云控配置,并执行云控命令。 已有条件:系统接受到云控配置会发送特定action的广播并将信息包含在intent中,我们只需要接受此广播并完成我们的逻辑即可。 一、预先分析 在开始写代码之前,做一些功能点大致的分析如下: 1:在java framework需要一个广播接收器,接受传来的广播,此广播接收器需要在开机时就注册。根据安卓开机流程,我选择在system_server启动AMS后,注册此Rece.

qq_23542165的博客 1395

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

安卓服务器接口文档,云服务器安卓接口

云服务器安卓接口 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。云手机(Cloud Phone,简称CPH),是基于华为云裸金属服务器虚拟出的带有原生安卓操作系统,同时具有虚拟手机功能的云服务器。简单来说,云手机=云服务器+Android OS。您可以远程实时控制云手机,实现安卓AP...

weixin_35669769的博客 856

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android 服务自动运行怎么办,怎么解决安卓软件服务停止后又自启?

原标题:怎么解决安卓软件服务停止后又自启?昨天说到安卓软件是如何做到开机启动的?怎么解决?当然流氓的软件并不单单这种,还有更流氓的我明明清理过电视了,关闭程序了结果一会之后这个软件的服务又开起了,后台占着内存把机子弄得卡死了。下面我们就说说这种软件是如何做到服务停止后又自启的,以及怎么解决。描述:退出一个程序后,仍旧在运行的那部分叫做servive(进程),进程在系统内存不够时会被系统杀掉或者被清...

weixin_34505281的博客 1120

android搭建git服务器,安卓上的git服务器-gidder(git server on android)

最近准备搭建个git服务器给xcode用。看到自己的安卓平板,因而想搜索有没有安卓上的git server。Thanks to google,总算搜到一个很好的软件: gidder , 点击进入google play下载地址 。========================11.13.更新: 使用256MB RAM的低端安卓手机也能使用.今晚我就用之前闲置的索爱U20i搭建了,需要注意点就是,...

weixin_33734087的博客 945
上一篇: Android四大组件之一:广播
下一篇: Android ContentProvider
G_MuHan
博客等级 码龄9年 31粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值