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机器人上体现为机…

Vue10 组件通信-插槽

插槽 分成三种&#xff1a;默认插槽、具名插槽、作用域插槽 默认插槽 父组件father.vue <template><div class"father"><h3>父组件</h3><div class"content"><Category title"热门游戏列表"><ul>…

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

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

【Linux系列】tail查询使用

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

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

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

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

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

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

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

Python: 日期和时间格式化

from datetime import datetime# 获取当前时间 current_time datetime.now() print(f"current_time {current_time}")# yyyymmdd format_date current_time.strftime("%Y%m%d") print(f"format_date {format_date}")# yyyy-mm-dd format_dat…

【android 更改三方相机配流size】

前言 强制修改三方相机配流size, 拍照和预览都可以 声明&#xff1a; 本帖用的是安卓开源代码&#xff1a; http://aospxref.com/android-14.0.0_r2/xref/frameworks/av/services/camera/libcameraservice/api2/CameraDeviceClient.cpp#867 修改方案 867 binder::Status C…

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

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

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

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

Windows上安装Seata服务

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

什么是MTC证书?清关为什么要提交MTC?

一、MTC认证的定义 MTC认证是一种由供应商、制造商或第三方实验室提供的认证&#xff0c;用于证明材料的质量和符合特定标准或规格的要求。它包括详细的材料信息、化学成分、机械性能测试结果和符合性声明等内容&#xff0c;为确保材料质量提供了有力的证据和保障。 二、MTC证书…

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

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

Linux系列---【使用lvm对xfs类型逻辑卷进行缩容】

使用lvm对xfs类型逻辑卷进行缩容 1.确定需要缩容的逻辑卷的类型是否是xfs df -Th 2.备份逻辑卷对应的目录原数据 # /tmp/home.dump:为备份后存放的位置&#xff0c;/home&#xff1a;为需要备份的目录 xfsdump -f /tmp/home.dump /home # 1.输入session名:home_session # 2.输入…

MBR与GPT分区表

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

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

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

Linux——进程的优先级、ACL

一、系统性能调优 Redhat7和centos7默认安装并启动了tuned服务 实验 [rootuser ~]# tuned-adm list //查看所有的调优方案 [rootuser ~]# tuned-adm recommend // 查看推荐的调优方案 virtual-guest 适用于作为虚拟机客户机运行的设备&#xff0…

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

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