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;
        }
    }
}

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

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

相关文章

人人都是开发者?Baidu Comate智能代码助手改变你传统的编程之路

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引入一、人人都是开发者二、Baidu Comate 智能编码助手2.1 Baidu Comate 是什么?2.2 Baidu Comate 支持那…

FANUC机器人工具坐标偏移的用法

一、工具坐标偏移的使用场景 在机器人位置不改变的情况下,工业机器人使用默认工具坐标系示教的一系列运动点位,要保持原本点位位置不变的情况下,改变机器人工具坐标的参数,就要用到机器人坐标转化的功能。在FANUC机器人上体现为机…

OSPF综合实验(超详细易懂)(HCIP)

1、拓扑信息 2、需求分析 3、IP规划 4、配置 5、测试 1、拓扑信息 2、需求分析 R4为ISP,其上只能配置I地址; R4与其他所有直连设备间均使用公…

【Linux系列】tail查询使用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

在数字化时代保持企业财务管理的持续技术创新

根据全球市场调查,在现阶段企业如果还不更新自身的商业运作模式,企业的业务可能会一点一点丧失市场竞争力。技术进步是所有行业发展的明显趋势。许多年轻的初创企业具有创新管理思维、精益求精的决策流程和现代化的商业基础设施,这些顺应时代…

转行网络安全的重要建议,助你顺利入门

目录 为什么写这篇文章 为什么我更合适回答这个问题 先问自己3个问题 1.一定要明确自己是否是真喜欢,还是一时好奇。 2.自学的习惯 3.选择网安、攻防这行的目标是什么? 确认无误后,那如何进入这个行业? 1.选择渗透测试集中…

重生奇迹mu烈火剑带什么技能

在重生奇迹mu游戏中,35级是每个职业的分水岭,只要到了35级,三职业都可以学习自己的高级技能,道士可以召唤自己的大狗,法师拥有冰咆哮,战士就是咱们今天要说的烈火剑法,这三种技能都需要玩家自己…

Chromium 调试指南2024 Windows11篇-安装代码编辑器VSCode(三)

1. 前言 在进行Chromium项目的开发和调试之前,安装适合的代码编辑器是至关重要的一步。本文将介绍如何安装Visual Studio Code,这是一个功能强大且广受开发者欢迎的代码编辑器。通过正确安装Visual Studio Code,我们将为后续的Chromium代码编…

张驰咨询六西格玛黑带培训,上海开班,质量精英的摇篮!

一、课程背景与意义 在当今竞争激烈的市场环境中,企业要想立于不败之地,就必须不断提升自身的核心竞争力。而六西格玛作为一种先进的质量管理工具和方法,已经被越来越多的企业所采纳。通过六西格玛黑带培训,学员们可以系统地掌握…

Windows上安装Seata服务

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Seata 是一款开源的…

IDEA创建SpringBoot项目仅支持JDK17及以上版本的解决方案

背景 IDEA创建SpringBoot项目仅支持JDK17及以上版本的解决方案 原因 由于SpringBoot3.x.x版本的到来,官方称将来17及以上版本将成为主流,但是大多数的项目仍然使用JDK8。 1.解决方案一 将https://start.spring.io/或者http://start.springboot.io/替…

MBR与GPT分区表

文章目录 MBR分区表MBR分区表结构MBR分区表项查看U盘的分区表信息查看系统中所有磁盘的分区类型获取分区表信息 GPT分区表保护性MBRGPT分区表头格式GPT分区表项格式分区类型分区属性分区表项内容 MBR分区表 CHS :磁头(Heads)、柱面(Cylinder…

羊大师:当代年轻人如何应对压力

羊大师:当代年轻人如何应对压力 当代年轻人面临各种压力,包括工作、学习、人际关系、经济等方面的压力。以下是一些建议,帮助年轻人应对这些压力: 认识并接受压力: 首先要认识到压力是生活中不可避免的一部分。 尝试…

盘点2024年4月Sui生态发展,了解Sui近期成长历程!

2024年4月是Sui的活动月,10–11日聚焦全世界目光的Sui Basecamp会议如约而至,来自65个国家的超过1100人参加了这场在巴黎举办的Sui全球性活动。21日,Sui首届全球黑客松正式开放注册。同时,20日-28日,七天四场大陆地区重…

【数据结构】单链表专题详细分析

与其临渊羡鱼,不如退而结网。💓💓💓 目录 •✨说在前面 🍋知识点一:什么是链表? • 🌰1.链表的概念 • 🌰2.链表的结构 • 🌰3.链表的分类 🍋…

9.为什么有时候会“烫烫烫”——之函数栈桢

目录 1. 什么是函数栈帧 2. 理解函数栈帧能解决什么问题呢? 3. 函数栈帧的创建和销毁解析 3.1 什么是栈? 3.2 认识相关寄存器和汇编指令 3.3 解析函数栈帧的创建和销毁 小知识:烫烫烫~ Q&A 1. 什么是函数栈帧 我们在写C语言代码…

AI智能分析高精度烟火算法EasyCVR视频方案助力打造森林防火建设

一、背景 随着夏季的来临,高温、干燥的天气条件使得火灾隐患显著增加,特别是对于广袤的森林地区来说,一旦发生火灾,后果将不堪设想。在这样的背景下,视频汇聚系统EasyCVR视频融合云平台AI智能分析在森林防火中发挥着至…

广告归因数据回传:打造低成本、高ROI的oCPX模型

优化成本、提升转化,这一直是App效果广告买量投放的两大核心目标。广告归因中的数据回传正是因此而生,在投放oCPX类智能出价时,通过数据回传,数据算法不断对模型进行调优,广告投放机器人就会变得更加地聪明和智能&…

css 子元素 圆 均匀分布 展开动画

一般情况下使用scss就可以实现 import "math";#app {display: flex;align-items: center;justify-content: center;width: 200px;height: 200px;position: relative;border-radius: 50%;border: 1px solid #000;> span {position: absolute;display: flex;align-…

什么是HTTP/2?

HTTP/2(原名HTTP 2.0)即超文本传输协议第二版,使用于万维网。HTTP/2主要基于SPDY协议,通过对HTTP头字段进行数据压缩、对数据传输采用多路复用和增加服务端推送等举措,来减少网络延迟,提高客户端的页面加载…