Service基础(实现IBinder)(二)
接着上文程序。
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)(二)相关推荐
- [ Azure | Az-900 ] 基础知识点总结(二) - 核心组件服务
本系列文章主要针对微软AZ-900所有知识点总结,助力通过考试,获得证书.本系列文章列表如下: [ Azure | Az-900 ] 基础知识点总结(一) - Cloud云概念 [ Azure | A ...
- 【Ubuntu】配置 Jetson Nano 基础环境(二)
[Ubuntu]配置 Jetson Nano 基础环境(二) 1 初始化 root 密码 2 修改用户密码(非必要) 3 加入 Docker 用户组 4 关闭.开启图形化 5 自动登录 5.1 当开启 ...
- Oracle数据库基础入门《二》Oracle内存结构
Oracle数据库基础入门<二>Oracle内存结构 Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Ar ...
- Tensorflow深度学习之十二:基础图像处理之二
Tensorflow深度学习之十二:基础图像处理之二 from:https://blog.csdn.net/davincil/article/details/76598474 首先放出原始图像: ...
- SQL基础使用入门(二): DML语句和DCL语句
SQL语句第二个类别--DML 语句 DML是数据操作语言的缩写,主要用来对数据表中数据记录实例对象进行操作,包括插入.删除.查找以及修改四大操作,这也是开发人员使用中最为频繁的操作. 1.插入记录 ...
- Linux中的基础IO(二)
Linux中的基础IO(二) 文章目录 Linux中的基础IO(二) 一.基本接口 二.文件描述符 三.文件描述符的分配规则 四.重定向 五.dup2系统调用 六.minishell 一.基本接口 i ...
- 计算机文化基础性考二,电大计算机文化基础形考二答案
<电大计算机文化基础形考二答案>由会员分享,可在线阅读,更多相关<电大计算机文化基础形考二答案(3页珍藏版)>请在人人文库网上搜索. 1.计算机文化基础形考二答案题目1关于Wi ...
- 计算机应用基础二00018,2019年10月自学考试00018《计算机应用基础》试题(二)
2019年10月自学考试00018<计算机应用基础>试题(二) 1. [单选题]在Word中,__D______的作用是能在屏幕上显示所有文本内容. (A).标尺 (B).控制框 (C). ...
- ie9无法获取未定义或 null 引用的属性“indexof”_前端JS基础篇(二)JS基本数据类型和引用数据类型及检测数据类型方法...
JS中的数据类型 (一).基本数据类型(值类型) 1.number:数字 -12.12.5.-12.5 0这些数字都是number: js中增加了一个number类型的数据:'NaN' typeof ...
最新文章
- [转载]VC轻松解析XML文件 - CMarkup类的使用方法
- python selenium webdriver入门基本操作
- h5engine造轮子
- C语言 Hello World - C语言零基础入门教程
- 实现spring mvc流程
- jQuery EasyUI API 中文文档 - 可调整尺寸
- table表格 html 1128
- NameError: name 'words' is not defined
- CSS优先级、引入方式、Hack
- 企业 IT 架构转型之道 阿里巴巴中台战略思想与架构实战
- 不加群提取群成员_QQ群引流推广怎么做
- LintCode 842: Origami
- 何凯明:Single Image Haze Removal Using Dark Channel Prior[CVPR 2009]
- 我的世界服务器怎么变无线耐久,我的世界大型服务器三小时新手变老手技巧
- OpenSIPS Crash 宕机的初步解决办法(二)
- 查看oracle磁盘组空间,shell脚本检查oracle中的ASM磁盘组空间并发送邮件
- 5G新方案!升级现有的基站和UE模拟器至5G毫米波频段
- notablilty笔记本模板_notability实测,让你上天的笔记软件
- CSDN上传设置资源积分的霸王条款
- Windows11网速慢解决方案
热门文章
- 珠宝玉石类小程序严格风险控制|没有资质不建议做了
- 易语言词达人爬取题库
- 如何自己制作java对话框_java中的卡片式对话框如何制作
- 君君学Linux设备驱动第三天之linux内核简简简介
- 第四门课 卷积神经网络(Convolutional Neural Networks)
- 装表接电工实训装置QY-DQS09
- 便携存储计算机说明书,【3nh高品质便携式电脑色差仪操作说明(NR200、NH310、NH300)】技术论文-南北潮商城...
- 设计模式奠基石——UML关系转化为代码
- excel中使用VBA进行多工作簿或多工作表一键汇总
- blockly -- Custom Blocks: Block Paradigms