本文 借鉴了网上的文章 http://www.cnblogs.com/linlf03/p/3296323.html

看了很多东西,写了个 本地服务,然后做了下总结:

服务分为 :一、远程服务(不同程序中,可以实现数据的共享)

二、本地服务(是没有界面的后台线程,执行大量的逻辑操作)

启动服务又可以分为两种:一、startService(不传递数据)

二、bindService(传递数据)

这里我们讲下 localService。

第一种 启动服务调用服务的流程: startService --> onCreate-->onStartConmand

停止服务: stopservice --> onDestory

第一次调用 startService会调用onCreate和onStartCommand,以后在没有停止服务以前,不管调用多少次 startService,都只会调用

onStartCommand方法

第二种 启动服务调用服务的流程: bindService --> onBind

停止服务  unBindService -->onDestory

多次调用bindService 只能调用一次 onBind方法

客户端代码如下:

<pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'Consolas';font-size:12.0pt;">
public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.service_layout);conn = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {myService = ((MyService.LocalBinder) service).getService();Log.d("ljy", "---onServiceConnected---name---->" + name);Log.d("ljy", "---onServiceConnected---service---->" + ((MyService.LocalBinder) service).stringToSend);}@Overridepublic void onServiceDisconnected(ComponentName name) {Log.d("ljy", "Disconnected");}};// myService.startForeground(1000,null);//设置后台服务为前台线程
//        myService.stopForeground(true);//设置后台服务为后台线程}public void doClick(View v) {Intent intent = new Intent(this, MyService.class);intent.putExtra("msg", "hhaha");switch (v.getId()) {case R.id.button_bind:bindService(intent, conn, Context.BIND_AUTO_CREATE);//bind 多次也只会调用一次onBind方法break;case R.id.button_unbind:try {unbindService(conn);} catch (Exception e) {e.printStackTrace();}break;case R.id.button_start:startService(intent);break;case R.id.button_stop:stopService(intent);break;}}
}
</pre><pre name="code" class="html">服务 MyService 代码:
<pre name="code" class="html">public class MyService extends Service {public class LocalBinder extends Binder{public String stringToSend ="I'm the test thing";public MyService getService(){return MyService.this;}}private final IBinder mBinder = new LocalBinder() ;@Nullable@Overridepublic IBinder onBind(Intent intent) {Log.d("ljy","onBind---------->"+intent.getStringExtra("msg"));return mBinder;}@Overridepublic boolean onUnbind(Intent intent) {Log.d("ljy", "onUnbind");return super.onUnbind(intent);}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.d("ljy","onStartCommand---------->"+intent.getStringExtra("msg"));return super.onStartCommand(intent, flags, startId);}@Overridepublic void onCreate() {super.onCreate();Log.d("ljy","onCreate");}@Overridepublic void onDestroy() {super.onDestroy();Log.d("ljy","onDestroy");}}

bindService 参数传递:1. 通过intent把参数传递给Service。

2.在service里创建个内部类继承下Binder,并创建这个内部类对象mBinder,通过onBind返回这个对象。然后在 客户端代码的serviceConnection中我们可以获得这个Binder,然后就可以调用Binder中getService接口获得这个服务,就可以调用服务中的方法进行数据的操作控制了

Service(一、本地服务)相关推荐

  1. Service(服务)之 Local Service(本地服务)

    一.Service简介 Android中服务是运行在后台的东西,级别与activity相同(同属四大组件).既然说service是运行在后台的服务,那么它就是不可见的,没有界面的东西.你可以启动一个服 ...

  2. 本地服务(local Service)的实现

    定义; --后台运行.不可见.没有界面 --优先级高于Activity 用途: --播放音乐.记录地理信息位置的改变.监听某种动作 注意: --运行在主线程,不能用来做耗时的请求活动 --可以在服务中 ...

  3. windows的服务中的登录身份本地系统账户、本地服务账户和网络服务账户修改

    以一个redis服务为例: 一个redis注册服务后一般是网络服务账户,但是当系统不存在网络服务账户时,就会导致redis服务无法正常启动.接下来修改redis服务的登录身份. cmd下输入如下命令: ...

  4. Android Service学习之本地服务

    Service是在一段不定的时间运行在后台,不和用户交互应用组件.每个Service必须在manifest中 通过<service>来声明.可以通过contect.startservice ...

  5. android技术服务,Android Service学习之本地服务

    Service是在一段不定的时间运行在后台,不和用户交互应用组件.每个Service必须在manifest中 通过来声明.可以通过contect.startservice和contect.bindse ...

  6. 服务(service)-----本地服务

    服务的简介:Android四大基本组件之一,没有图形用户界面,总是在后台执行耗时操作. 服务的生命周期:onCreate onStartCommand onDestroy onBind 本地服务:on ...

  7. 【Service】bindService:绑定本地服务和远程服务示例

    绑定本地服务 AndroidManifest.xml中声明服务: <service android:name=".TestLocalService"><inten ...

  8. android学习笔记---40_建立能与访问者进行相互通信的本地服务,后台运行的service

    40_建立能与访问者进行相互通信的本地服务 ------------------------------------------- 1.本地服务:如果服务和访问者在一个进程中那么就叫做本地服务.   ...

  9. centos7 搭建本地git_本地服务调用K8S环境中的SpringCloud微服务实战

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:原创文章分类汇总及配套源码,涉及Java.Docker.K8S.Devops等 下图是典型的微 ...

最新文章

  1. Zuul上传文件,中文文件名乱码解决办法
  2. 今年CVPR,我们填补了3D场景布局数据集空白,并向全世界开源!
  3. 用python画玫瑰花代码-用python画一朵玫瑰给你
  4. pythonsklearn多元回归回归_用sklearn进行多元线性回归
  5. web.xml上监听器作用
  6. 安装solc模块4.25版本
  7. 附带备忘录的斐波那契(C++)
  8. java 2和java有什么区别
  9. 帆软高级函数应用之数(学)值函数
  10. 又发现昆仑通态的一个BUG
  11. vmlinuz文件解压方法
  12. Selenium获取浏览器Network数据包
  13. 敏捷其实很简单(7) Scrum Master的7种武器之长生剑和孔雀翎
  14. C++STL算法equal(15)
  15. mongodb-报错FailedToParse: Password must be URL Encoded for mongodb:// URL:
  16. 导出数据库表信息生成Word文档(数据字典)
  17. 10年测试经验分享:新手怎么找软件测试的项目?
  18. 用 TensorFlow 追踪千年隼号
  19. MAC M1 芯片在 yarn install 时报错:The CPU architecture “arm64“
  20. Swagger3 API接口文档规范课程(Java1234)(内含教学视频+源代码)

热门文章

  1. 2/28 A - 化学 (编译器选 GNU G++)
  2. SpringBoot+SpringSecurity+Thymeleaf 演示CSRF攻击
  3. python泰坦尼克号数据预测_泰坦尼克号幸存者预测 python 详解
  4. A/C加权的matlab实现
  5. python界面设计
  6. FPGA-DDR总线电源硬件设计技巧-Fly-by走线阻抗
  7. Microsoft Edge浏览器上不了网,其他浏览器可以
  8. ictclas linux 64 java 下载,Ubuntu下ICTCLAS JNI的使用
  9. 自学Java day17 jvav网络编程 从jvav到架构师
  10. 增加表空间数据文件语句