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的一些使用的更多相关文章

  1. 通过AngularJS实现前端与后台的数据对接(二)——服务(service,$http)篇

    什么是服务? 服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通信,并且能保证数据的一致性. 服务是一个单例对象,在每个应用中只会被实例化一次(被$injector实例化) ...

  2. Azure Service Fabric 开发环境搭建

    微服务体系结构是一种将服务器应用程序构建为一组小型服务的方法,每个服务都按自己的进程运行,并通过 HTTP 和 WebSocket 等协议相互通信.每个微服务都在特定的界定上下文(每服务)中实现特定的 ...

  3. 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...

  4. C#创建、安装、卸载、调试Windows Service(Windows 服务)的简单教程

    前言:Microsoft Windows 服务能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面.这 ...

  5. java中Action层、Service层和Dao层的功能区分

    Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DAO只 ...

  6. 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 [ ...

  7. Android—Service与Activity的交互

    service-Android的四大组件之一.人称"后台服务"指其本身的运行并不依赖于用户可视的UI界面 实际开发中我们经常需要service和activity之间可以相互传递数据 ...

  8. angularjs 1 开发简单案例(包含common.js,service.js,controller.js,page)

    common.js var app = angular.module('app', ['ngFileUpload']) .factory('SV_Common', function ($http) { ...

  9. IIS启动失败,启动Windows Process Activation Service时,出现错误13:数据无效 ;HTTP 错误 401.2 - Unauthorized 由于身份验证头无效,您无权查看此页

    因为修改过管理员账号的密码后重启服务器导致IIS无法启动,出现已下异常 1.解决:"启动Windows Process Activation Service时,出现错误13:数据无效&quo ...

  10. 如何利用mono把.net windows service程序迁移到linux上

    How to migrate a .NET Windows Service application to Linux using mono? 写在最前:之所以用要把windows程序迁移到Linux上 ...

随机推荐

  1. spring3.0的BeanFactory上下文context获取不到bean

    开门见山,背景: 系统初始化的时候扫包实例化bean,然后一个工具类实现ServletContextAware接口,拿到servletContext之后: WebApplicationContextU ...

  2. [C语言 - 12] Union联合

    union Student {   int age;   char *name; } stu;   union只按照最长的数据成员分配控件,适用于有N个数据不会同时出现的情况,用以压缩空间.

  3. Keil : Contents missmatch at:08000E84H Verify Failed!

    Keil 下载时出以下错误: Device: STM32F103VB VTarget = 3.300V State of Pins: TCK: 0, TDI: 0, TDO: 1, TMS: 0, T ...

  4. Jquery ajax 得到返回值

    Jquery ajax 得到返回值 1.ajax默认是异步调用的,所以得到的返回值是空值,要得到值必须改成同步:async: false,//同步. 2.必须定义一个全局变量 var result = ...

  5. JQuery事件处理的注意事项

    1.jQuery 名称冲突 jQuery 使用 $ 符号作为 jQuery 的简介方式. 某些其他 JavaScript 库中的函数(比如 Prototype)同样使用 $ 符号. jQuery 使用 ...

  6. @@IDENTITY与SCOPE_IDENTITY的用法

    SCOPE_IDENTITY   和   @@IDENTITY   的作用都是取得返回在当前会话中的任何表内所生成的最后一个标识值,简单的说就是在执行一条插入语句之后使用@@IDENTITY的全局变量 ...

  7. 使用jdbc连接上oracle的两种方法

    1. 使用thin连接 优点:thin驱动都是纯Java代码,并且使用TCP/IP技术通过java的Socket连接上Oracle数据库,所以thin驱动是与平台无关的,无需安装Oracle客户端,只 ...

  8. 将java源码打成jar包

    方法一:通过jar命令 jar命令的用法: 下面是jar命令的帮助说明: 用法:jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] ...

  9. HDU 5074 Hatsune Miku(DP)

    Problem Description Hatsune Miku is a popular virtual singer. It is very popular in both Japan and C ...

  10. android116 轮播 viewPager实现

    布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:to ...