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. POJ2389: 大数字乘法算法

    2014-12-26 大数字乘法算法一般是采用模拟"小学生乘法演算过程”方法. 主要算法思想: 1. 乘数a第i)位与乘数b第j)位数字相乘,并将该乘积结果放到乘积结果数组product的第 ...

  2. 一切不以用户为中心的O2O 都是耍流氓

    今天去万达广场逛街,手机搜了下附近的Wifi,发现有万达的免费Wifi,想起前些日子网上说万达要做O2O的试运营,于是尝试连接了下,结果弹出页面,要输入手机号,然后发送验证码才能登陆,结果输入手机号, ...

  3. 转载 C#中使用结构来传递多个参数

    C#中当参数超过5个时,建议用结构来传递多个参数. 示例代码如下: public struct MyStruct { public string str; public int number; } c ...

  4. 如何获得网页上的swf视频教程文件?

    网上有很多免费的视频教程,但有的视频教程这能在线观看,无法离线下在,如何获得网页上的swf视频教程文件呢? 我问以"我要自学网"的视频教程为例进行讲解.这是一个我要自学网的PS视频 ...

  5. 多线程基础及实例(java)

    前言: 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行.也可以把它理解为代码运行的上下文.所以线程基本上是轻量级的进程 ...

  6. fastica matlab 转载

    FastICA工具箱1 http://chunqiu.blog.ustc.edu.cn/?p=68#comment-3512 FastICA代码网址如下:http://research.ics.aal ...

  7. Triangles

    1010: Triangles Time Limit: 2 Sec   Memory Limit: 128 MB Submit: 18   Solved: 8 Description You are ...

  8. datagridview控件--导出Excel

    dataGridView控件可以说很方便的显示了数据,而且对于修改和删除数据也很方便,我在前面的一篇博客中写到了如何去绑定数据到该控件上dataGridView控件--绑定数据方法,今天我将如何将数据 ...

  9. cocos2d-x Menu、MenuItem

    转自:http://codingnow.cn/cocos2d-x/832.html 学习cocos2d-x中的菜单主要需要了解:菜单(CCMenu)和菜单项(CCMenuItem)以及CCMenuIt ...

  10. 3、VS2010+ASP.NET MVC4+EF4+JqueryEasyUI+Oracle项目开发之——用户登录

    近期因为项目赶着上线,一直没时间接着写博客,今天最终空出了时间.声名:我不是专业美工,所以界面问题,希望大家不要拍砖.登录界面例如以下: 在ASP.NET MVC中,要新增一个功能,我们首先要加入一个 ...