android基础-服务

同样使用intent来传递服务

oncreate是服务第一次启动调用,onStartCommand是服务每次启动的时候调用,也就是说服务只要启动后就不会调用oncreate方法了。可以在myservice中的任何位置调用stopself方法让服务停止下来。

服务生命周期

前台服务类似于通知会有个图标在状态栏,为了防止被杀或回收,使用和通知一样的方式,变成前台服务

标准服务写法:

但有更加简洁的写法,不需要关注线程和服务停止,onHnadleIntent本身就在线程中,而且执行完成后会自动销毁。

补充:

1、前台进程:可以理解为是最顶部的,直接跟用户交互的。比如说我们操作的Activity界面.
2、可见进程:可以见的,但是不操作的,比如说我们在一个Activity的顶部弹出一个Dialog,这个Dialog就是前台进程,但是这个Activity则是可见进程。(操作的只是Dialog,而不是Activity但可见)
3、服务进程:服务可以理解为是忙碌的后台进程,虽然是在后台,但是它很忙碌。
4、后台进程:后台进程就是退隐到后台,不做事的进程。(比如按home键程序在后台但没有被干掉/)
5、空进程:空进程是不做事的,没有任何东西在上面跑着,仅作缓存作用。(比如按返回键退出此时就是空进程,销毁掉的进程就是空进程)
假设,内存不够用了,会先杀谁呢?
首先杀的是空进程,要是还不够就杀后台进程,要是还不够,那么就杀服务,但是服务被杀死以后,等内存够用了,服务又会跑起来了。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/ChenYiRan123456/article/details/123840817

绑定服务:

  1. Binder是IBinder的空实现类

OnBind是需要实现的,这里返回的是DownloadBinder中的实例。

红色框是向下转换,这样得到了downloadBinder的对对象,就可以去使用他们的方法了。

bindservice、startactivity等都是context的方式,直接用

看下如下的代码注释:

 
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
 
public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity-vv";
    private MyService.MyBinder mb;
    private ServiceConnection conn = new ServiceConnection() {
 
 
        //当客户端正常连接着服务时,执行服务的绑定操作会被调用
        //此时传来的IBinder对象是onbinder的返回的对象
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            Log.d(TAG, "onServiceConnected: ");
            //将IBinder对象转成MyBinder
            mb = (MyService.MyBinder) service;
            //调用MyBinder中的获取进度的方法:实现监控
            int process = mb.getProcess();
            Log.d(TAG, "当前进度是: " + process);
        }
 
        //当客户端和服务的连接丢失了
        @Override
        public void onServiceDisconnected(ComponentName name) {
            Log.d(TAG, "onServiceDisconnected: ");
 
        }
    };
 
    //IBinder
    //ServicerConnection:用于绑定客户端和Service
    //进度监控
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    /**
     * 按钮点击事件
     *
     * @param v
     */
    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:
                //绑定服务:最大的 作用是用来实现对Service执行的任务进行进度监控
                //如果服务不存在: onCreate-->onBind-->onUnbind-->onDestory
                // (此时服务没有再后台运行,并且它会随着Activity的摧毁而解绑并销毁)
                //服务已经存在:那么bindService方法只能使onBind方法被调用,而unbindService方法只能使onUnbind被调用
                Intent it3 = new Intent(this, MyService.class);
                bindService(it3, conn, BIND_AUTO_CREATE);
 
                break;
            case R.id.unbind:
                //解绑服务
                if (MyService.IsBinder)
                    unbindService(conn);
                break;
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

「ETL实战」搭建数仓,解决多源业务系统关联分析难题(定制化业务)

在大数据分析盛行的今天,关联分析作为数据挖掘和业务洞察的重要手段,受到了极大关注。然而,随着数据量的激增和源业务系统的复杂性增加,关联分析的性能问题逐渐成为了一个不可忽视的挑战。 本文将介绍借助ETL工具,如何…

Go 语言基础之常用包【flag、time、strconv、io】

1、命令行参数包 flag flag 包就是一个用来解析命令行参数的工具。 1.1、os.Args import ("fmt""os" )func main() {if len(os.Args) > 0 {for index, arg : range os.Args {fmt.Printf("args[%d]%v\n", index, arg)}} } 运行结果&#…

Windows程序设计课程作业-2(音乐文件播放功能)

目录 1、作业内容 要求1: 提示: 要求2: 提示: 作业提交方式: 2、主要思路 1)准备工作 2)提取音乐文件功能 3)选择音乐进行播放 4)异常信息进行处理 5)停止播…

【最新点云数据增强综述】深度学习点云数据增强技术的进展

深度学习(DL)已成为点云分析任务(如检测、分割和分类)的主流和有效方法之一。为了减少深度学习模型训练过程中的过拟合,提高模型性能,尤其是在训练数据的数量和/或多样性有限的情况下,增强往往至关重要。虽然各种点云数据增强方法已被广泛应用于不同的点云处理任务中,但…

[muduo网络库]——muduo库的Reactor模型(剖析muduo网络库核心部分、设计思想)

一、前言 在学习 C 服务端的过程中,必不可少的一项就是熟悉一个网络库,包括网络库的应用和其底层实现。我们熟知的网络库有 libevent、libev、muduo、Netty 等,其中 muduo 是由陈硕大佬个人开发的 TCP 网络库,最近跟着课程正在深…

Springboot+Vue项目-基于Java+MySQL的车辆管理系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

Java方法和数组

方法 Java中的方法就是c语言中的函数。 方法的定义 定义格式如下 修饰符 返回值 方法名([参数列表]){代码块[return 返回值;] } //方括号[]括起来代表可以没有,不是必须有的方法名采用小驼峰命名(就是有多个单词,第一个单词首字母小写其…

Redis学习1——redis简介、基础

介绍 redis简介 Redis(Remote Dictonary Server) 是由Salvatore Sanfilippo开发的key-value缓存数据库,基于C语言开发。目前市面上,Redis和MongoDB是当前使用最广泛的NoSQL,而就Redis技术而言,它的性能十分优越,可以…

回溯法、全排列、子集等

回溯法 感想:回溯算法本质是一个循环,有点像while循环 一些回溯法(递归)的经典应用 1.全排列 2.子集 其实上面两个点,也是对应着高中数学里面的“排列”与“组合” 1.全排列问题 给定一个集合S{a,b,c}&#xff0…

mysql数据库标识符的使用

ddl CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 学号,createDate datetime DEFAULT NULL,userName varchar(20) DEFAULT NULL,pwd varchar(36) DEFAULT NULL,phone varchar(11) DEFAULT NULL,age tinyint(3) unsigned DEFAULT NULL,sex char(2) DEFAU…

crmeb的分销推广如何用

CRMBE分销推广说明 1、CRMEB分销模式 分销模式: 指定分销、人人分销、满额分销 指定分销: 用户默认无分销权限,需要后台开通分销权限后,才可以通过推广下级获得返佣; 人人分销: 用户在商城注册后自动获得分…

SpringBoot的图片上传

简介 该文档旨在介绍一个基于Spring Boot框架的简单文件上传功能的实现方式。本文档将详细介绍相关代码的功能和配置以及如何使用它们。 样例 技术栈 Spring Boot:一个用于快速开发基于Spring的应用程序的框架。Thymeleaf:一个用于在Web应用程序中创建…

超越机械抓手:看多指机器人如何灵活运用触觉?

论文标题: Learning Visuotactile Skills with Two Multifingered Hands 论文作者: Toru Lin, Yu Zhang, Qiyang Li, Haozhi Qi, Brent Yi, Sergey Levine, and Jitendra Malik 1. 机器人新挑战:多指手指操作 在自动化和智能化日益普及的…

winform图书管理系统

winform图书管理系统说明文档 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 图书管理员 读者管理 图书管理 添加 修改 删除 查看 入库 书册列表 书册管理用户管理退出 借书 还书 系统管理员 修改图书管理权限 项目获取:…

java对象互换工具类

1:将Object类型转成json字符串 /*** 将对象转为字符串* param obj* return*/public static String toString(Object obj) {if(obj null) {return null;}if ("".equals(obj.toString())) {return null;}if (obj instanceof String) {return obj.toString();}try {Ob…

20232906 2023-2024-2 《网络与系统攻防技术》第九次作业

20232906 2023-2024-2 《网络与系统攻防技术》第九次作业 1.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件。 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。 该程序同时包含另一个代码片段,getShell&am…

vscode远程免密ssh原理与实操方法

什么是SSH SSH是一种加密协议,全称为Secure Shell,用于安全地远程登录到服务器或其他远程设备上执行命令或传输文件。它提供了一种安全的加密通信机制,使得远程登录和文件传输等操作不会被恶意攻击者窃取或篡改,确保了数据的保密…

全球10KM土地利用程度数据

全球10KM土地利用程度数据 数据介绍 “一带一路”监测区域土地利用程度指数平均值为0.34,不同区域利用程度差异明显,但总体上高值区域与人口分布的稠密区域吻合。中南半岛、南亚、欧洲和小亚细亚半岛等地海拔较低,水热组合条件较好&#xff…

SqlServer数据库导出表结构和数据为脚本文档

需求:把数据库里的数据结构及数据存为脚本,下次一键执行数据库 操作方法: 一、右击该数据库,选择任务 二、下一步 三、如果导出整个数据库就默认,若导出指定的表和视图就选择具体的数据库对象 四、选择另存为脚本文件…

分解质因数-第12届蓝桥杯国赛Python真题解析

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第61讲。 分解质因数&#…