android Service 与 activity 通信 并不断传数据

注:这只是个Demo 

 以下载为案例,实现开启下载,暂停下载,下载进度不断发送给activity

class DownloadService : Service() {override fun onBind(intent: Intent?): IBinder? {return MyBinder()}inner class MyBinder : Binder(){val service:DownloadServiceget() = this@DownloadService}private var mCurrentProgress:Int = 0var isStart = AtomicBoolean() fun startDownload(progress:(progress:Int)-> Unit){if (!isStart.get()){Log.d("downloadService","进度:开启")isStart.set(true)Thread(object :Runnable{override fun run() {while (isStart.get()) {try { if (mCurrentProgress<100){mCurrentProgress ++}if (mCurrentProgress>=100){isStart.set(false)}progress.invoke(mCurrentProgress) Thread.sleep(1000)} catch (e: InterruptedException) {throw RuntimeException(e)}}}} ).start() } }fun stopDownload(){if (isStart.get()){Log.d("downloadService","进度:暂停")isStart.set(false)}}}

在清单文件配置<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><application ><service android:name=".activity.DownloadService"/></application></manifest>


class DownloadActivity : Activity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_download)findViewById<View>(R.id.btnStart).setOnClickListener {startDownload()}findViewById<View>(R.id.btnStop).setOnClickListener {stopDownload()}}var isStartService = AtomicBoolean()fun startDownload(){if (!isStartService.get()){isStartService.set(true)Intent(this@DownloadActivity,DownloadService::class.java).apply {this.putExtra("data1","数据1")}.let {bindService(it,serviceConnection,Context.BIND_AUTO_CREATE)}}else{downloadService?.startDownload {progress->Log.d("downloadService","++ 进度:${progress}%")}}}fun stopDownload(){downloadService?.stopDownload()}var downloadService:DownloadService? = nullvar serviceConnection = object :ServiceConnection{override fun onServiceConnected(p0: ComponentName?, iBinder: IBinder?) {downloadService =  (iBinder as DownloadService.MyBinder).servicedownloadService?.startDownload {progress->Log.d("downloadService","进度:${progress}%")}}override fun onServiceDisconnected(p0: ComponentName?) {}}override fun onDestroy() {super.onDestroy()stopDownload()}
}

结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/499963.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习|决策树

左图的点是一种线性不可分的情况&#xff0c;无法拿一条直线去将进行分开。 每一个节点都代表一个决策&#xff0c;从而导致节点的分流。 最终的目标肯定是要达到分类。 但取得目标的过程是有所谓的好坏。 而这个好坏用熵/信息增益来衡量。 熵是一种用于反映系统混乱程度的物理…

ES系列之Logstash实战入门

概述 作为ELK技术栈一员&#xff0c;Logstash用于将数据采集到ES&#xff0c;通过简单配置就能把各种外部数据采集到索引中进行保存&#xff0c;可提高数据采集的效率。 原理 数据源提供的数据进入Logstash的管道后需要经过3个阶段&#xff1a; input&#xff1a;负责抽取数…

【通信基础知识】完整通信系统的流程图及各模块功能详解

2024.2.29 抱歉最近在写毕设大论文&#xff0c;因此没有太多时间更新。然而&#xff0c;在写论文的过程中&#xff0c;发现自己对通信系统的了解还不够全明白&#xff0c;因此差了一些硕博论文总结了一个完整的通信系统流程图。若有不对的地方请多多指正//部分内容有参考ChatGP…

layui中,父页面与子页面,函数方法的相互调用、传参

<%--父页面--%> <script type"text/javascript">var KaoHaoType 0; // 考号类型 自定义参数1// 选取考号类型function SelectKaoHaoType(callBack) {KaoHaoType 0; // 默认选择填涂考号layer.open({type: 2, title: 请选择 考号区类型, ar…

Day05:反弹SHELL不回显带外正反向连接防火墙出入站文件下载

目录 常规基本渗透命令 文件上传下载-解决无图形化&解决数据传输 反弹Shell命令-解决数据回显&解决数据通讯 防火墙绕过-正向连接&反向连接&内网服务器 防火墙组合数据不回显-ICMP带外查询Dnslog 思维导图 章节知识点&#xff1a; 应用架构&#xff1a;W…

二维码样式美化怎么做?二维码改颜色、样式的方法

随着现在二维码广泛使用&#xff0c;面对不同的使用需求二维码展示的内容不同外&#xff0c;还需要对二维码的样式做处理&#xff0c;常见的设置有颜色修改、添加logo、编辑文字、样式调整等。那么&#xff0c;在遇到二维码样式修改问题时&#xff0c;为了能够更快的解决样式修…

IDC 中搭建 Serverless 应用平台:通过 ACK One 和 Knative 玩转云资源

作者&#xff1a;元毅、庄宇 如何打造云上&#xff08;公共云&#xff09;、云下&#xff08;IDC 数据中心&#xff09;统一的云原生 Serverless 应用平台&#xff0c;首先我们来看一下 ChatGPT 4 会给出什么样的答案&#xff1a; 如何打造云上、云下统一的云原生 Serverless…

LeetCode73题:矩阵置零(python3)

代码思路&#xff1a; 这里用矩阵的第一行和第一列来标记是否含有0的元素&#xff0c;但这样会导致原数组的第一行和第一列被修改&#xff0c;无法记录它们是否原本包含 0。因此我们需要额外使用两个标记变量分别记录第一行和第一列是否原本包含 0。 class Solution:def setZe…

java爬取深圳新房备案价

Java爬取深圳新房备案价 这是我做好效果,一共分3个页面 1、列表;2、统计;3、房源表 列表 价格分析页面 房源页面 一、如何爬取 第一步:获取深圳新房备案价 链接是:http://zjj.sz.gov.cn/ris/bol/szfdc/index.aspx 第二步:通过楼盘名查询获取明细 链接:http://z…

Repetition Improves Language Model Embeddings

论文结论&#xff1a; echo embeddings将句子重复拼接送入到decoder-only模型中&#xff0c;将第二遍出现的句子特征pooling作为sentence embedding效果很好&#xff0c;优于传统方法 echo embeddings与传统embedding方法区别&#xff0c;如图所示&#xff1a; Classical emb…

WebCPM:首个开源的交互式网页搜索中文问答模型

论文题目&#xff1a;WEBCPM: Interactive Web Search for Chinese Long-form Question Answering   论文日期&#xff1a;2023/05/23(ACL 2023)   论文地址&#xff1a;https://arxiv.org/abs/2305.06849   GitHub地址&#xff1a;https://arxiv.org/abs/2305.06849 文章…

自动化构建平台(三)Linux搭建私有的docker镜像库之Harbor的安装和使用详解

文章目录 前言一、Harbor的安装第一步&#xff1a;安装docker第二步&#xff1a;安装docker-compose第三步&#xff1a;安装Harbor 二、Harbor登录三、Harbor项目管理第一步&#xff1a;创建项目第二步&#xff1a;推送镜像 四、Harbor权限控制五、Harbor自动清理多余的镜像手动…