接着上文程序。

IBinder:在android中用于远程操作对象的一个基本接口,可以实现进度监控。

首先,将MyService里面的IBinder返回值改成

return new MyBinder();
对于onBind方法而言,要求返回Binder对象,实际上,我们会自己定义一个内部类,集成Binder类,如下:
class MyBinder extends Binder {//定义自己需要的方法(实现进度监控)public int getProcess(){return i;}}
启动服务 :创建——启动——摧毁,在创建里面启一个线程(从1数到100,用于模拟耗时任务),程序如下:
 @Overridepublic void onCreate() {super.onCreate();Log.e("TAG","服务创建了");//开启一个线程(从1数到100,用于模拟耗时任务)new Thread(){@Overridepublic void run() {for (int i=0;i<=100;i++){try {sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}}.start();}

每次点击创建,都会执行如下代码:

@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.e("TAG","服务启动了");return super.onStartCommand(intent, flags, startId);}

进行实时的监控:

 //当客户端正常连接着服务器时,执行服务的绑定操作会被调用@Overridepublic void onServiceConnected(ComponentName componentName, IBinder iBinder) {Log.e("TAG","慕课");MyService.MyBinder mb= (MyService.MyBinder) iBinder;//得到进度int step=mb.getProcess();Log.e("TAG","当前进度时:"+step);}//当客户端和服务器的连接丢失了

MainActivity完整代码如下:

package com.example.service;import androidx.appcompat.app.AppCompatActivity;import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;public class MainActivity extends AppCompatActivity {//IBinder//Service Connection  用于绑定客户端和Service//进度监控private ServiceConnection conn=new ServiceConnection() {//当客户端正常连接着服务器时,执行服务的绑定操作会被调用@Overridepublic void onServiceConnected(ComponentName componentName, IBinder iBinder) {Log.e("TAG","慕课");MyService.MyBinder mb= (MyService.MyBinder) iBinder;//得到进度int step=mb.getProcess();Log.e("TAG","当前进度时:"+step);}//当客户端和服务器的连接丢失了@Overridepublic void onServiceDisconnected(ComponentName componentName) {}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void operate(View v) {switch (v.getId()){case R.id.start://启动服务 :创建——启动——摧毁//如果服务已经创建了,后续重复启动,操作的都是同一个服务,不回在创建新 的服务,除非先摧毁他Intent it1=new Intent(this,MyService.class);startService(it1);break;case R.id.stop:Intent it2=new Intent(this,MyService.class);stopService(it2);break;case R.id.bind://绑定服务Intent it3=new Intent(this,MyService.class);bindService(it3,conn,BIND_AUTO_CREATE);break;case R.id.unbind://绑定服务:最大的作用就是用来实现对Service执行的任务进行进度监控//解绑服务unbindService(conn);//解绑服务break;}}
}

MyService完整代码如下:

package com.example.service;import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;import android.util.Log;public class MyService extends Service {private int i;public MyService() {}//创建@Overridepublic void onCreate() {super.onCreate();Log.e("TAG","服务创建了");//开启一个线程(从1数到100),用于模拟耗时的任务new Thread(){@Overridepublic void run() {super.run();try {for (i = 1; i <= 100; i++) {sleep(100);}}catch (Exception e){e.printStackTrace();}}}.start();}//启动方法@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.e("TAG","服务启动了");return super.onStartCommand(intent, flags, startId);}//解绑@Overridepublic boolean onUnbind(Intent intent) {Log.e("TAG","服务解绑了");return super.onUnbind(intent);}//摧毁@Overridepublic void onDestroy() {Log.e("TAG","服务摧毁了");super.onDestroy();}//绑定方法//IBinder:在android中用于远程操作对象的一个基本接口//对于onBind方法而言,要求返回Binder对象//实际上,我们会自己定义一个内部类,集成Binder类class MyBinder extends Binder {//定义自己需要的方法(实现进度监控)public int getProcess(){return i;}}@Overridepublic IBinder onBind(Intent intent) {// TODO: Return the communication channel to the service.// throw new UnsupportedOperationException("Not yet implemented");Log.e("TAG", "服务绑定了");//Binderreturn new MyBinder();}
}

Service基础(启动服务与绑定服务)(一)

Service基础(实现IBinder)(二)相关推荐

  1. [ Azure | Az-900 ] 基础知识点总结(二) - 核心组件服务

    本系列文章主要针对微软AZ-900所有知识点总结,助力通过考试,获得证书.本系列文章列表如下: [ Azure | Az-900 ] 基础知识点总结(一) - Cloud云概念 [ Azure | A ...

  2. 【Ubuntu】配置 Jetson Nano 基础环境(二)

    [Ubuntu]配置 Jetson Nano 基础环境(二) 1 初始化 root 密码 2 修改用户密码(非必要) 3 加入 Docker 用户组 4 关闭.开启图形化 5 自动登录 5.1 当开启 ...

  3. Oracle数据库基础入门《二》Oracle内存结构

    Oracle数据库基础入门<二>Oracle内存结构 Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Ar ...

  4. Tensorflow深度学习之十二:基础图像处理之二

    Tensorflow深度学习之十二:基础图像处理之二 from:https://blog.csdn.net/davincil/article/details/76598474   首先放出原始图像: ...

  5. SQL基础使用入门(二): DML语句和DCL语句

    SQL语句第二个类别--DML 语句 DML是数据操作语言的缩写,主要用来对数据表中数据记录实例对象进行操作,包括插入.删除.查找以及修改四大操作,这也是开发人员使用中最为频繁的操作. 1.插入记录 ...

  6. Linux中的基础IO(二)

    Linux中的基础IO(二) 文章目录 Linux中的基础IO(二) 一.基本接口 二.文件描述符 三.文件描述符的分配规则 四.重定向 五.dup2系统调用 六.minishell 一.基本接口 i ...

  7. 计算机文化基础性考二,电大计算机文化基础形考二答案

    <电大计算机文化基础形考二答案>由会员分享,可在线阅读,更多相关<电大计算机文化基础形考二答案(3页珍藏版)>请在人人文库网上搜索. 1.计算机文化基础形考二答案题目1关于Wi ...

  8. 计算机应用基础二00018,2019年10月自学考试00018《计算机应用基础》试题(二)

    2019年10月自学考试00018<计算机应用基础>试题(二) 1. [单选题]在Word中,__D______的作用是能在屏幕上显示所有文本内容. (A).标尺 (B).控制框 (C). ...

  9. ie9无法获取未定义或 null 引用的属性“indexof”_前端JS基础篇(二)JS基本数据类型和引用数据类型及检测数据类型方法...

    JS中的数据类型 (一).基本数据类型(值类型) 1.number:数字 -12.12.5.-12.5 0这些数字都是number: js中增加了一个number类型的数据:'NaN' typeof ...

最新文章

  1. [转载]VC轻松解析XML文件 - CMarkup类的使用方法
  2. python selenium webdriver入门基本操作
  3. h5engine造轮子
  4. C语言 Hello World - C语言零基础入门教程
  5. 实现spring mvc流程
  6. jQuery EasyUI API 中文文档 - 可调整尺寸
  7. table表格 html 1128
  8. NameError: name 'words' is not defined
  9. CSS优先级、引入方式、Hack
  10. 企业 IT 架构转型之道 阿里巴巴中台战略思想与架构实战
  11. 不加群提取群成员_QQ群引流推广怎么做
  12. LintCode 842: Origami
  13. 何凯明:Single Image Haze Removal Using Dark Channel Prior[CVPR 2009]
  14. 我的世界服务器怎么变无线耐久,我的世界大型服务器三小时新手变老手技巧
  15. OpenSIPS Crash 宕机的初步解决办法(二)
  16. 查看oracle磁盘组空间,shell脚本检查oracle中的ASM磁盘组空间并发送邮件
  17. 5G新方案!升级现有的基站和UE模拟器至5G毫米波频段
  18. notablilty笔记本模板_notability实测,让你上天的笔记软件
  19. CSDN上传设置资源积分的霸王条款
  20. Windows11网速慢解决方案

热门文章

  1. 珠宝玉石类小程序严格风险控制|没有资质不建议做了
  2. 易语言词达人爬取题库
  3. 如何自己制作java对话框_java中的卡片式对话框如何制作
  4. 君君学Linux设备驱动第三天之linux内核简简简介
  5. 第四门课 卷积神经网络(Convolutional Neural Networks)
  6. 装表接电工实训装置QY-DQS09
  7. 便携存储计算机说明书,【3nh高品质便携式电脑色差仪操作说明(NR200、NH310、NH300)】技术论文-南北潮商城...
  8. 设计模式奠基石——UML关系转化为代码
  9. excel中使用VBA进行多工作簿或多工作表一键汇总
  10. blockly -- Custom Blocks: Block Paradigms