Service的一些使用
service服务一般主要是作为后台服务使用的,前台服务一般结合通知一起。
service一般主要用作长期后台服务的,而且和Activity结合性不那么紧密,
一般如果需要频繁的更新UI主要是用Activity里面直接开Thread,然后用handler
传到UI线程中去更新UI。
不过我在用Activity这种方式去跑大量的压力测试的时候,发现经常Activty
会崩溃掉。开始是以为6.0的原因,不过另一个小伙伴的用service跑的就没有
出现我这种情况。于是我花了一两天也更换成用service去跑,不知道结果怎么样。
先大概记录下。
作为四大组件之一,需要在manifest里面配置一下,才可以启动。
service有几个主要回调方法,
onCreate:service第一次启动时会调用的方法,后面再startService时则不会调用,
因为service已经启动了。
onStartCommand(onStart已经被google宣称为过时的方法):在OnCreate方法之后会
调用的方法,当多次startService时会多次调用该方法。带有intent参数,这个
方法可以从其它地方传递数据过来。
onBind: 这个主要是方便其它组件和service进行即时调用而需要的一个方法,IBinder
比较容易让人想起Binder也就是进程间调用IPC,这里需要返回一个IBinder类型的
对象。我们可以在类的其它地方extends一个Binder类,在这个类中不需要重写任何方
法,只需要写一个我们需要在service进行调用的一个方法就好了。
onUnbind:接触绑定时需要作的一些工作可以在这个方法里面写入。
service怎么和Activity之间进行数据的传递呢,广播。
首先在Activity里面注册广播,广播可以注册很多个,
主要是用action来区分的,如registerReceiver(receiver,new IntentFilter(CURRENT_ENCRYPT_SPEED))
,可以对一个写在Activity里面写一个内部类广播接收器,其中注册多个action,
而在service里面如下:
Intent intent = new Intent(intentMsg);
intent.putExtra(name,data);
sendBroadcast(intent);
这样就可以把数据发送到Activity里面进行更新数据了。我这里用注册了14个广播,
从以前经理说过的或者网上说的,广播用多了不好。我这里出现了一个内存泄漏的问题
,A resource was acquired at attached stack trace but never released. memory leak
stackoverflow之后说是要用MAT分析,出现的比较少,还没有去分析。
在Activity里面要service停止,可以直接执行stopService方法,不过一般
我都是在onStartCommand方法里面开一个标志位true进行死循环。
我需要从Activity里面传递一个参数到service里面让标志位变为false就可以结束掉
执行的任务。
Intent service = new Intent(WorkActivity.this, WorkService.class);
conn = new MyServiceConnection();
bindService(service, conn, Context.BIND_AUTO_CREATE);
关于conn的实现如下,
public class MyServiceConnection implements ServiceConnection
{
//当绑定服务成功的时候会调用此方法
public void onServiceConnected(ComponentName name, IBinder service)
{
AppLogger.w("service Connected");
myBinder = (WorkService.MyBinder) service;
myBinder.setPressureing(false);
stopTest.setText("测试停止");
PRESSUREING = false;
}
public void onServiceDisconnected(ComponentName name)
{
}
}
当service正在执行的时候,执行bindService方法的时候是不会再次执行
onStartCommand方法,只会执行bind里面的方法,这样就会避免再次执行任务
的问题。
首先执行onServiceConnected里面的方法,再执行bind里面绑定的方法。
这样就完成了数据的传递。
记得解绑广播和解绑服务,不然又是红红的报错。
@Override
protected void onDestroy() {
PRESSUREING = false;
unregisterReceiver(receiver);
if (conn != null) {
unbindService(conn);
}
super.onDestroy();
}
service
enabled=true|false 一般默认地设置为true,表示该service可以被
system实例化。
exported=true|false,默认设置为false,表示该service不能
被其它应用程序使用,只能本应用程序内使用。
Service的一些使用的更多相关文章
- 通过AngularJS实现前端与后台的数据对接(二)——服务(service,$http)篇
什么是服务? 服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通信,并且能保证数据的一致性. 服务是一个单例对象,在每个应用中只会被实例化一次(被$injector实例化) ...
- Azure Service Fabric 开发环境搭建
微服务体系结构是一种将服务器应用程序构建为一组小型服务的方法,每个服务都按自己的进程运行,并通过 HTTP 和 WebSocket 等协议相互通信.每个微服务都在特定的界定上下文(每服务)中实现特定的 ...
- 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。
异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...
- C#创建、安装、卸载、调试Windows Service(Windows 服务)的简单教程
前言:Microsoft Windows 服务能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面.这 ...
- java中Action层、Service层和Dao层的功能区分
Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DAO只 ...
- org.jboss.deployment.DeploymentException: Trying to install an already registered mbean: jboss.jca:service=LocalTxCM,name=egmasDS
17:34:37,235 INFO [Http11Protocol] Starting Coyote HTTP/1.1 on http-0.0.0.0-8080 17:34:37,281 INFO [ ...
- Android—Service与Activity的交互
service-Android的四大组件之一.人称"后台服务"指其本身的运行并不依赖于用户可视的UI界面 实际开发中我们经常需要service和activity之间可以相互传递数据 ...
- angularjs 1 开发简单案例(包含common.js,service.js,controller.js,page)
common.js var app = angular.module('app', ['ngFileUpload']) .factory('SV_Common', function ($http) { ...
- IIS启动失败,启动Windows Process Activation Service时,出现错误13:数据无效 ;HTTP 错误 401.2 - Unauthorized 由于身份验证头无效,您无权查看此页
因为修改过管理员账号的密码后重启服务器导致IIS无法启动,出现已下异常 1.解决:"启动Windows Process Activation Service时,出现错误13:数据无效&quo ...
- 如何利用mono把.net windows service程序迁移到linux上
How to migrate a .NET Windows Service application to Linux using mono? 写在最前:之所以用要把windows程序迁移到Linux上 ...
随机推荐
- Polymorphism
多态定义(百度百科):多态(Polymorphism)按字面的意思就是“多种状态”.在面向对象语言中,接口的多种不同的实现方式即为多态.引用Charlie Calverts对多态的描述 ——多态性是允 ...
- 基于Qt的P2P局域网聊天及文件传送软件设计
基于Qt的P2P局域网聊天及文件传送软件设计 zouxy09@qq.com http://blog.csdn.net/zouxy09 这是我的<通信网络>的课程设计作业,之 ...
- 大公司最喜欢问的Java集合类面试题
看了一些所谓大公司的JAVA面试问题,发现对于JAVA集合类的使用都比较看重似的,而自己在这方面还真的是所真甚少,抽空也学习学习吧. java.util包中包含了一系列重要的集合类,而对于集合类,主要 ...
- linux shell-syntax error near unexpected token错误
在windows下用记事本编写linux shell脚本后,执行遇到syntax error near unexpected token错误 问题原理:网上找了好久,找到原因,原来是回行的问题,每个系 ...
- iOS语音播放之切换听筒和扬声器的方法解决方案
关于流媒体播放的相关知识可以加本人QQ:564702640 一起来讨论 [[UIDevice currentDevice] setProximityMonitoringEnabled:YES]; // ...
- 转载 深入理解JavaScript中的this关键字
转载原地址: http://www.cnblogs.com/rainman/archive/2009/05/03/1448392.html 深入理解JavaScript中的this关键字 1. 一 ...
- stm32 时钟配置——外部时钟倍频、内部时钟倍频 【worldsing笔记】
stm32可选的时钟源 在STM32中,可以用内部时钟,也可以用外部时钟,在要求进度高的应用场合最好用外部晶体震荡器,内部时钟存在一定的精度误差. 准确的来说有4个时钟源可以选分别是HSI.LSI.H ...
- Keil uCos 2.52 stm32 【worldsing笔记】
1.uCOSii V2.52 a.加了7个可以配置的钩子函数宏 #define OS_TASK_CREATE_HOOK_EN 0 /* 任务创建时调用钩子函数 使能 ...
- PTA 5-14 电话聊天狂人 (25分)
给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数NN(\le 10^5≤105),为通话记录条数.随后NN行,每行给出一条通话记录.简单起见,这里只列出 ...
- 高性能javascript
高性能javascript开发 标签(空格分隔): javascript DOM访问与修改 访问DOM元素是具有代价的,修改元素代价较为昂贵,会导致浏览器重新计算页面的几何变化. 尽量减少DOM访问, ...