Service 启动方式有两种

  • startService(intent)
  • bindService(intent,conn,Context.BIND_AUTO_CREATE)

startService(intent)

  生命周期: onCreate()-  >onStartCommand()->startService()->onDestroy()

  该方法启动service,会执行一个onStartCommand()的方法,所以一些操作可以放在 onStartCommand() 中进行处理。

bindService(intent,conn,Context.BIND_AUTO_CREATE)

  生命周期:onCreate()->onBind()->onUnbind()->onDestroy()

  绑定启动 service,

使用该方法启动 service 分为几步

1.在 Service 中,重写 onBind() 方法,返回一个 iBinder 对象。

1     @Override
2     public IBinder onBind(Intent arg0) {
3         // TODO Auto-generated method stub
4         Log.d("learnservice", "绑定服务...");
5         return new MyBinder();
6     }

2.新建 BinderService 类继承 Service ,在 BindService 类里新建内部类 MyBinder 继承Binder ( Binder 实现 IBinder 接口)。该类中实现一些与 service 通信的方法,比如 setData()方法。

1     public class MyBinder extends Binder{
2         public void setData(String data){
3             MyService.this.data=data;
4         }
5     }

3.在 Activity 里,实例化 ServiceConnection 接口的实现类,重写 onServiceConnected() 和 onServiceDisconnected() 方法。

 1 ServiceConnection conn=new ServiceConnection() {
 2
 3         @Override
 4         public void onServiceDisconnected(ComponentName name) {
 5             // TODO Auto-generated method stub
 6
 7         }
 8
 9         @Override
10         public void onServiceConnected(ComponentName name, IBinder service) {
11             // TODO Auto-generated method stub
12             binder=(MyBinder) service;   //该binder,需要在activity中声明。
13             Log.d("learnservice", "绑定服务conn...");
14         }
15     };

4.使用 button 的 onClick() 或者 activity 的 onCreat() 等触发 bindService() 方法

1     @Override
2     public void onClick(View v) {
3         intent = new Intent(MainActivity.this,MyService.class);
4         bindService(intent, conn, Context.BIND_AUTO_CREATE);5     } 

5.在 activity 中声明 service中的binder

1 private MyService.MyBinder binder;

6.同时把该 binder 放在 serviceConnection 的 onServiceConnection() 方法中

1 binder=(MyBinder) service;

这样,就完成了 Activity 和 Service 通过 bindService() 方法绑定并通信。

Android 开发之 bindService() 通信相关推荐

  1. Android开发之Socket通信的方法

    老套图上图: 如上所示: 我这边定义了两个APP一个是server端一个是客户端 步骤: 先安装服务端APP,再安装客户端APP,然后打开客户端APP后悔自动打开服务端的service然后开启服务端的 ...

  2. Android开发之旅:组件生命周期(二)

    引言 应用程序组件有一个生命周期--一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生 ...

  3. Android开发之旅:应用程序基础及组件

    --成功属于耐得住寂寞的人,接下来几篇将讲述Android应用程序的原理及术语,可能会比较枯燥.如果能够静下心来看,相信成功将属于你. 引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android ...

  4. android之json解析优化,Android开发之json解析

    目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上 ...

  5. android中oncreate方法,android开发之onCreate( )方法详解

    这里我们只关注一句话:This is where you should do all of your normal static set up.其中我们只关注normal static, normal ...

  6. android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序

    android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序   在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity, ...

  7. Android开发之TextView高级应用

    Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大家分享一下TextView的一些使用技巧. A ...

  8. android注册弹窗,Android开发之PopupWindow创建弹窗、对话框的方法详解

    本文实例讲述了Android开发之PopupWindow创建弹窗.对话框的方法.分享给大家供大家参考,具体如下: 简介: PopupWindow 可创建类似对话框风格的窗口 效果: 使用方法: 使用P ...

  9. Android开发之SpannableString具体解释

    在实际的应用开发过程中常常会遇到.在文本的不同部分显示一些不同的字体风格的信息如:文本的字体.大小.颜色.样式.以及超级链接等. 普通情况下,TextView中的文本都是一个样式.对于类似的情况.能够 ...

最新文章

  1. IntelliJ IDEA中用快捷键自动创建测试类
  2. java程序员入门先学什么开发者工具
  3. 如何用PyTorch进行语义分割?
  4. impala连接使用方法
  5. 华为AC6605与OSSH免费版华为Portal系统的对
  6. html pie标签,css3pie怎么用?
  7. linux单个core的线程,正确使用Core Data多线程的3种方式
  8. 有关l2,1范数作用的理解--正则化项作用,不同于l1范数(矩阵元素绝对值之和)的稀疏要求,l21范数还要求行稀疏
  9. Linux学习总结(四)-两种模式修复系统,单用户,救援模式
  10. 【概率论基础】机器学习领域必知必会的12种概率分布(附Python代码实现)
  11. heidsql(mysql)安装教程和mysql修改密码
  12. c语言自动计费工作,c语言编程实现话单计费实例
  13. 微信扫一扫扫描二维码带参
  14. IntelliJ IDEA配置WEB浏览器
  15. 数据库使用SHADOW系统实现高可用性
  16. java.lang.NoClassDefFoundError: Could not initialize class com.cyj.util.Jdbc
  17. 数字图像处理 笔记--2
  18. Item25 Use std::move on rvalue reference, std::forward on universal references
  19. 第115章 属性关键字 - SqlListDelimiter
  20. Java面试知识总结(带基础)

热门文章

  1. 实体类在set字段时报空指针异常
  2. fatal: could not read Username for ‘https://git.dev.tencent.com‘ 解决方法
  3. 在使用pydelicious时出现HTTP Error 500: Internal Server Error的错误的解决方法:
  4. 什么是JavaScript垃圾回收?
  5. win11任务栏怎么更换颜色 win11任务栏更换颜色的设置方法
  6. 华为电脑笔记本_华为笔记本电脑屏幕质量竟如此糟糕!
  7. (转)MTK 消息分发及窗口管理
  8. 要使一个问题能够用计算机解决,如何正确并解决在使用计算机中的问题?
  9. asp.net web新闻发布系统_Web.config在渗透中的作用
  10. 海绵城市工程_打造透水“民心路”、共创海绵“生态城”|市政工程管理处持续推进城市道路“黑臭水体改造”工程...