首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android前台服务的使用(一)

为什么要用前台服务? A 早期写的Service都是后台运行的,而后台运行的Service优先级也相对较低 ,当系统内存不足时,在后台运行的Service有可能会被回收。...而前台服务是用户可见的,并且系统内存不足时不允许系统杀死,前台服务还必须有一个状态栏的通知,只有服务被终止或从前台主动移除通知后才能被解除。... 上面前台的服务配置就完成了,我们在MainActivity中开启前台服务,并点击看看发送广播有没有变化。...binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) //启动前台服务...一个简单的前台服务就这样完成了。 本来做这个的目的就是为了跨进程的通讯,所以接下来就是验证新建一个App发送广播后,当前的服务能否接收到。

2K40

Android插件化——Activity的启动

在之前的文章中,我们有讲过Android插件化加载资源。其核心思想是,通过仿照安装的流程,自行创建Resources,然后通过ResId去加载相应的资源。...同样,在启动插件Activity时,我们的思路也类似。通过仿照Activity的启动过程,我们自行创建Activity,“偷梁换柱”,交给系统去启动。...前两步是我们的外部接口,最后一步是Binder方法。 首先我们要明确一定,AMS是系统的服务,我们是不能改变的。如果AMS的行为被我们改变,手机中所有App的行为都会被改变,这就是病毒了。。。...获取插件的Resources的方法参考Android插件化——资源加载 在performLaunchActivity中,完成了newActivity后,在onCreate之前,我们会调用callActivityOnCreate...但是,我们的插件App没有安装,我们是如何绕过检查的呢? 首先,我们要了解Android是在哪里对Activity是否有注册进行检查的。

80170
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    安卓应用无响应,你真的了解吗?

    (MessageQueue) 包工头经过一番努力干完活(完成service启动的生命周期),然后等待SharedPreferences(简称SP)的持久化; 包工头在SP执行完成后,立刻向中控系统汇报工作已完成...创建的单线程的线程池) 如果是动态广播,或者静态广播没有正在执行持久化操作的SP任务,则不需要经过“queued-work-looper”线程中转,而是直接向中控系统汇报,流程更为简单,如下图所示: ?...SP的apply将修改的数据项更新到内存,然后再异步同步数据到磁盘文件,因此很多地方会推荐在主线程调用采用apply方式,避免阻塞主线程,但静态广播超时检测过程需要SP全部持久化到磁盘,如果过度使用apply...SP的数据持久化。...前台与后台服务的区别 系统对前台服务启动的超时为20s,而后台服务超时为200s,那么系统是如何区别前台还是后台服务呢?

    2.3K30

    服务重启了,如何保证线程池中的数据不丢失方案 - 提前做持久化

    服务重启了,如何保证线程池中的数据不丢失方案 方案:提前做持久化 1.用户请求过来之后,先处理业务逻辑1,紧接着向DB中写入一条任务数据,状态是:待执行。...2.然后将查出的任务提交到线程池中,由它处理业务逻辑2。 3.处理成功之后,修改任务的待执行状态为:已执行。...需要注意的是:业务逻辑2的处理过程,要做幂等性设计,同一个请求允许被执行多次,其结果不会有影响。 4.如果此时,线程池在处理的过程中,服务down机了,业务逻辑2的数据会丢失。...5.但此时DB中保存了任务的数据,并且丢失那些任务的状态还是:待执行。 在下一次定时任务周期开始执行时,又会将那些任务数据重新查询出来,重新提交到线程池中。...6.如果要考虑失败的情况,还需要在任务表中增加一个失败次数字段。 7.当失败超过了一定的次数,可以将任务状态改成:失败。这样后续可以人工处理。

    11510

    【微服务】Nacos数据持久化以及集群的搭建

    本期介绍 本期主要介绍Nacos数据持久化以及集群的搭建 文章目录 数据持久化 初始化数据库 开启mysql存储 测试 Nacos集群搭建 概述 配置步骤 配置详情 常见错误 数据持久化 在单机模式时...初始化数据库 在conf目录下,提供了nacos-mysql.sql SQL语句,进行数据库的初始化 要求:5.6+ mysql 注意:如果使用mysql 5.5,需要修改sql语句...:startup.cmd 节点2:复制Nacos8843 修改端口号:8843 启动服务:startup.cmd 节点3:复制Nacos8845 修改端口号:8845...conf/cluster.conf 启动服务:startup.cmd 成功启动   2)配置节点2 复制节点nacos-2.1.0-8841,并重命名nacos-2.1.0-8843 修改端口号...启动服务 3)配置节点3 复制节点nacos-2.1.0-8841,并重命名nacos-2.1.0-8845 修改端口号 启动服务 4)配置成功 常见错误 1)db.num

    91830

    Android插件化架构 - Activity的启动流程分析

    概述 Android插件化架构,目前第三方的框架比较多,早几年自己用的是DL框架,这个框架的源码比较简单主要用的是静态代理。...我们需要启动插件APP那么就需要启动里面的Activity,这些Activity事先是不会在主工程的AndroidManifest.xml中配置,启动一个没有注册的Activity肯定会报错,我们是否可以想个办法去绕过系统的检测...这里有好几个思想,C/S架构思想就是服务思想,模块化思想,分层次思想等等… 最后我们看一下在启动流程中出现的几个主要的类都分别有什么功能: ** ActivityManagerService** 组件通信系统核心管理类...那么结合动态代码设计模式以及Activity的启动流程,我们就可以尝试去拦截Activity的启动流程,让没有在AndroidMainfest.xml中注册的Activity也能启动并且不报错,这样我们就算是跨出了插件化架构的第一步了...相关视频 一次让你彻底掌握Android插件化,征服面试!

    46030

    Android前台服务的使用(二)--使用LiveEventBus实现进程间通讯(附源码)

    ——《微卡智享》 本文长度为2654字,预计阅读6分钟 前言 上一篇《Android前台服务的使用(一)》介绍了Android前台服务的使用,其中通讯用的广播方式在来接消息,在文中最后也说过LiveEventBus...InitLiveEventBus的初始化,上图中可以看到这里使用的是observeforever模式,所以要注意两点: 单独定义observe方法, 需要手动释放才可以。...") .setContentText("我是一个前台服务的Demo") .setWhen(System.currentTimeMillis())...可以实时收到消息,非激活状态(Stoped)无法实时收到消息,需等到Activity重新变成激活状 * 态,方可收到消息 * 2、autoClear * 配置在没有Observer关联的时候是否自动清除...这样使用LiveEventBus加上前台服务就实现的我们最初想到的业务的硬件控制的解耦,并且用LiveEventBus后不需要使用广播的方式两边写好多的代码。

    1.9K20

    Android高频面试专题 - 基础篇(一)Activity

    activity-A(以及activity-B)的onDestroy方法都不会执行; 1.5 进程重要等级和Activity的关系 前台>可见>服务>后台>空 前台:与当前用户正在交互的Activity...可见:Activity可见但是没有在前台所在的进程。 服务:Activity在后台开启了Service服务所在的进程。 后台:Activity完全处于后台所在的进程。...主线程发起bind Application,AMS 会做一些配置工作,然后让主线程 bind ApplicationThread,ApplicationThread将启动Activity2的信息通过H对象发送给主线程...将某个Activity的启动模式设置为singleTop,启动此Activity时,会先检查栈顶是否是此Activity的实例,如果是,则直接复用,如果不是,才创建实例。...改变数据传输方式(参见Activity之间传递数据的方式) 1. 静态static 2. 单例 3. Application 4. 持久化 20.

    2.1K31

    Android内存管理(六)Android对Linux系统的内存管理机制进行的优化

    当某个应用组件启动且该应用没有运行其他任何组件时,Android 系统会使用单个执行线程为应用启动新的 Linux 进程。默认情况下,同一应用的所有组件在相同的进程和线程(称为“主”线程) 中运行。...运行于同一进程的所有组件均在 UI 线程中实例化,并且对每个组件的系统调用均由该线程进行分派。...因此,是否终止某个进程取决于该进程中所运行组件的状态 。Android会有限清理那些已经不再使用的进程,以保证最小的副作用。...由于运行服务的进程其级别高于托管后台 Activity 的进程,因此,在 Activity 中启动一个长时间运行的操作时,最好为该操作启动服务,而不是简单地创建工作线程,当操作有可能比 Activity...更加持久时尤要如此。

    1.6K10

    关于 Android 进程和线程,你必须了解的东西

    进程 ---- 当一个程序第一次启动的时候,Android 会启动一个 Linux 进程和一个主线程。默认情况下,同一应用的所有组件均在相同的进程中运行,且大多数应用都不会改变这一点。...3、服务进程 — Service process 正在运行已使用 startService() 方法启动的服务且不属于和上述两个更高类别进程的进程。...比较常见的使用场景 由于运行服务的进程级别高于托管后台 Activity 的进程,因此启动长时间运行操作的 Activity 最好为此操作启动服务,而不是简单地创建工作线程,当操作有可能比 Activity...更加持久时尤要如此。...例如,正在将图片上传到网站的 Activity 应该启动服务来执行上传,这样一来,即使用户退出 Activity,仍可在后台继续执行上传操作。

    84520

    Android中的进程和线程

    ---- 当某个应用组件启动且该应用没有运行其他任何组件时,Android 系统会使用单个执行线程为应用启动新的 Linux 进程。...因此,是否终止某个进程的决定取决于该进程中所运行组件的状态。 下面,我们介绍决定终止进程所用的规则。...3.服务进程 正在运行已使用 startService() 方法启动的服务且不属于上述两个更高类别进程的进程。...由于运行服务的进程其级别高于托管后台 Activity 的进程,因此启动长时间运行操作的 Activity 最好为该操作启动服务,而不是简单地创建工作线程,当操作有可能比 Activity 更加持久时尤要如此...系统绝对不会为每个组件实例创建单独的线程。运行于同一进程的所有组件均在 UI 线程中实例化,并且对每个组件的系统调用均由该线程进行分派。

    1.2K30

    【Android从零单排系列三十七】《Android四大组件——Service》

    下面是关于Android Service的概要: 服务的类型: 前台服务(Foreground Service):可显示通知,被认为是用户正在主动使用的部分,如音乐播放器。...同步与异步: 服务默认在主线程中运行,如果执行耗时操作,需要在服务内部创建新的线程来处理任务,以避免阻塞主线程。...可以通过设置android:exported属性来控制是否允许其他应用组件启动或绑定该服务。 启动Service: 使用startService()方法启动服务。...exported(导出状态):指示是否允许其他应用组件启动或绑定该服务。 process(进程名):指定服务运行所在的进程名。...permission(权限):指定使用服务所需的权限。 foreground(前台状态):指示服务是否为前台服务。

    28710

    Android面试题(四大组件篇)

    Android面试题(四大组件篇) window、进程、线程篇 Android面试题(数据存储、view篇) Activity Q:说下Activity的生命周期?...Q:onStart()和onResume()/onPause()和onStop()的区别? 是否位于前台,对用户是否可见的区别 Q:Activity A启动另一个Activity B会回调哪些方法?...如何去开启一个前台服务? 前台服务即对用户可见的服务,可以以通知的形式创建前台服务 Q:是否了解ActivityManagerService,谈谈它发挥什么作用?...这适合像下载一样的服务,立即恢复,积极执行。 提升Service优先级 前台服务是被认为用于已知的正在运行的服务,当系统需要释放内存时不会优先杀掉该进程。...所以为了能让这个机制完美运行,可以开启两个服务,相互监听,相互启动。服务A监听B的广播来启动B,服务B监听A的广播来启动A。经过实验,这个方案是可行的。

    91420

    Spring Cloud Alibaba之服务发现组件 - Nacos的数据持久化(八)

    数据持久化 在之前的教程中,我们对于Nacos服务端自身并没有做过什么特殊的配置,一切均以默认的单机模式运行,完成了上述的所有功能学习。...但是,Nacos的单机运行模式仅适用于开发和测试环境,对于有高可用要求的生产环境就不太合适了。 有人说我们可不可以直接通过启动多个单机模式Nacos服务的方式,来实现多个节点Nacos的高可用吗?...所以,如果启动多个默认配置的Nacos节点,数据存储是存在不一致问题的。为了解决这个问题,Nacos采用了集中式存储方式来支持集权化部署,目前只支持MySQL的存储。...,可以尝试继续使用单机模式启动Nacos。...看配置是否生效。 思考 关于Nacos数据的持久化实现,与其他的中间件的相比,在实现上并没有采用分布式算法来解决一致性问题,而是采用常规的集中化存储来实现。

    26910

    android:persistent和android:priority的区别,对进程优先级有什么影响?

    android:persistent:用于设置应用组件是否具有持久性。当android:persistent设置为true时,表示该组件具有持久性,即使在设备重启后也会保留其状态。...系统会根据一些因素(例如用户当前正在与之交互的应用、前台服务等)来确定进程的优先级。 虽然android:priority可以在某种程度上影响广播接收器的执行顺序,但它并不会直接影响进程的优先级。...确实,通过将自己的应用作为系统应用(安装目录为/system/apk/),并设置android:persistent="true"属性,可以实现持久性,即应用会在系统启动时加载,并在异常出现时自动重新启动...实现这种持久性的原理是,AMS(ActivityManagerService)在系统启动时加载所有persistent为true的应用。...对于persistent应用,当应用进程意外终止时,AMS会尝试重新启动该应用进程,以保证应用的持久性。

    1.8K10

    Android 开发你需要了解的那些事:学习路线规划+技术需注意的问题

    有任何问题也欢迎一起来交流讨论 第一点:ANR 的其中一个条件并不是在 Activity 主线程做耗时任务 Q: 你是否了解过 ANR? A: 知道,但不是很了解。...Service Timeout : 前台服务20秒内,后台服务在200秒内没有执行完毕。...需要写数据库,这个时候需要启动线程。当收到消息 N 多的时候,如果都用 new Thread 启动线程的话,是否会有问题。场景模拟可以通过循环创建子线程模拟。...另一个原因是减少线程的频繁创建和销毁。 第三点:内部类都可能存在的问题 Q: 上面我们说到了,如果界面调用一次,而且需要启动线程的时候。...setContentView(R.layout.activity_main); mStaticHandler.sendEmptyMessage(0); } } 第五点:持久化

    79020

    大话企业级android读书笔记(二)

    举例来说,有一个线程运行在后台从网络上下载数据,它可能会在onCreate()中创建线程,在onDestroy()中结束线程。...活动的前台生命时间,从调用onResume()到相应的调用onPause()。...因为onPause()是唯一一个保证在进程被杀之前会调用的,因此你应该使用onPause()来写任何持久化存储数据。 被标记为No的方法保护活动寄宿的进程在他们调用的时候不会被杀掉。...android的隐形管理员:Service Service从字面上理解即为“服务”,这里与windows中的服务有点类似。...(),然后是onDestory(). android的接收员:BroadcastReceiver 广播接收者用于异步接收广播Intent 广播接收者没有界面,但是接收到消息后可以启动一个Activity

    1K50

    Android入门教程 | 四大组件之Service(前台服务,后台服务)

    即使用户停止与应用的交互,前台服务仍会继续运行。 启动前台服务 前台服务可以给用户提供界面上的操作。 每个前台服务都必须要在通知栏显示一个通知(notification)。...停止前台服务 在Service中调用stopForeground(boolean)方法,能停止前台,但是不退出整个服务。 这个boolean表示是否取消掉前台服务的通知。false表示保留通知。...,线程信息等等 onBind 方法中我们返回null,表明这个服务不能用bindService的方式启动 在 AndroidManifest.xml 中注册这个服务 android...-- ... --> 注意 name 是我们的服务的类名。它是唯一必需的属性 enabled 为 true,表明系统可以示例化这个服务。...Service 的启动方式有两种:startService 启动和 bindService 启动。 注意:服务与其他应用程序对象一样,在其托管进程的主线程中运行。

    5.6K30
    领券