Activity和Service的启动

Activity 启动Service两种方式与区别 Activity 启动Service两种方式: startService bindService   startService(Intent): 1.定义一个类继承Service 2.在Manifest.xml文件中配置该Service 3.使用Context的startService(Intent)方法启动该Service 4.不再使用时,调用stopService(Intent)方法... 阅读详情

activity启动(通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。)

standard:新启动的activity位于栈顶;当我们用ApplicationContext或者service去启动activity的时候会报错,因为该activity会默认进入启动它的activity所在的栈,非Activity类型的context没有对应的任务栈,可以加一个FLAG_ACTIVITY_NEW_TASK标记位,此时实际上以singleTask模式启动的。

singleTop:如果调用的目标Activity已经位于调用者的Task的栈顶,则不创建新实例,而是使用当前的这个Activity实例,并调用这个实例的onNewIntent()方法,onResume()方法并且在onNewIntent中setIntent,来更新最新的intent;此外当系统内存不够会随时杀死后台的activity,这样就会调用onCreate(类似于FLAG_ACTIVITY_SINGLE_TOP效果)

singleTask:如果实例存在所有位于该activity上面的activity实例会被销毁,调用onNewIntent(),onResume();如果该activity处于onPause,onStop状态,则是onNewIntent,onRestart,onStart,onResume,并且在onNewIntent中setIntent,来更新最新的intent;此外当系统内存不够会随时杀死后台的activity,这样就会调用onCreate;如果新启动的activity在另一个栈,整个后台任务栈会移到前台,前台移动到后台,自带FLAG_ACTIVITY_CLEAR_TOP效果。(类似于FLAG_ACTIVITY_NEW_TASK效果)

singleInstance:新启动的activity独占一个栈,它启动的activity也会放于其他栈中


用startActivityForResult启动singleTask和singleInstance启动模式的activity,系统会直接返回Activity.RESULT_CANCELED而不会等待返回,因为Android认为不同的task之间是不能传递数据的,如果要传递需要用intent传递




Service分类:

按照使用范围:本地服务,远程服务;按照运行类别:前台服务和后台服务

Service生命周期



IntentService流程:onCreate()(handlerThread创建一个looper,创建handler和handerThread的looper绑定)——onStartCommand()———子线程中创建的handler.sendMessage——handler.handleMessage(onHandelIntent+stopSelf(int startId))——onDestroy(looper.quit,终止消息循环)

stopself()会立刻停止服务,stopSelf(int startId)在尝试停服务前,会判断最近启动服务的次数是否和startId相等,相等说明已经执行完最后一个任务,停止服务,否则不停止服务

handler.obtainMessage()比new Message()要好,obtainMessage()是从消息池拿来一个msg循环利用,不需要另开辟空间new,new 需要重新申请,效率低

startService和stopService定义在Context中,stopSelf可以在Service中的任何一个位置调用


尽管HandlerThread的文档比较简单,但是它的使用并没有想象的那么easy。

  1. 创建一个HandlerThread,即创建了一个包含Looper的线程。

    HandlerThread handlerThread = new HandlerThread("leochin.com");

    handlerThread.start(); //创建HandlerThread后一定要记得start()

  2. 获取HandlerThread的Looper

    Looper looper = handlerThread.getLooper();

  3. 创建Handler,通过Looper初始化

    Handler handler = new Handler(looper);

通过以上三步我们就成功创建HandlerThread。通过handler发送消息,就会在子线程中执行。

如果想让HandlerThread退出,则需要调用handlerThread.quit();。


1.    AMS --- ActivityManagerService.java, 实现了IBinder接口,管理四大组件。
2.    ApplicationThread.java, 实现了IBinder接口,activity整个框架中客户端和服务端(Ams)通信的接口。同时也是类ActivityThread的内部类。这样就有效地把Ams和ActivityThread绑在了一起。
3.    ActivityThread.java,如第2点所述,ApplicationThread所绑定的客户端就是ActivityThread。ActivityThread这个类在Activity客户端非常重要。
a.    它是应用程序的入口,java程序的入口是main()方法,同样,当我们需要启动一个Android应用程序时,ActivityManagerService会通过Socket进程间通信机制,通知Zygote进程为这个应用程序创建一个新的进程,同时启动一个主线程的时候,主线程就从ActivityThread.main方法开始执行,它会初始化一些对象,调用performLaunchActivity来完成整个启动过程
b.    它是Activity客户端的管理类,由它来决定,什么时候调用onCreate(),什么时候调用onResume()方法。当Activity发起一个请求时,比如startActivity(),或者finish()的时候,它会来处理这个请求,然后调用其它的组件来具体做事。





service中启动activity NULL 博文链接:https://410063005.iteye.com/blog/1941314 立即下载

相关推荐

Activity启动

Activity启动,catogory action的使用,以及使用startActivityForResult启动的一些问题。

android8.0以后在Activity中调用startService启动服务报错

Activity.onReume 中 startService 报错 java.lang.IllegalStateException: Not allowed to start service Intent 解决办法1(真正是前台服务,会有前台通知显示) 该方法调用 startForegroundService 后必须在5s内调用 startForeground启动前台通知,否则会报 ANR/无响应。 public ComponentName startServiceOreo(Intent inte

mowwwcom的专栏 1833

Matlab图像处理频域滤波实现——高斯低通、高通、带通带阻滤波器

如果你想要进一步了解更多的相关知识,

小嘤熊的博客 1万+

Activity源码之 启动流程——onPause 的调用

Activity启动时,onPause 的调用 简述 场景描述:当活动 A 启动活动 B 时,A 先调用 onPause 的,然后 B 调用 onCreate、onStart、onResume,待 B(非透明) 完全覆盖 A 时,最后 A 调用 onStop 。 自己看了一遍,简略的花了一下流程图,方便日后查看 源码版本:android-27 已经注明了,哪个方法,在那个类中,方便大...

xiayu54的博客 1817

FreeModbus V1.6主机模式实战:如何在STM32上实现Modbus RTU主从一体通信

本文详细介绍了如何在STM32平台上利用FreeModbus V1.6开源协议栈实现Modbus RTU主从一体通信。文章深入剖析了V1.6版本主机模式的架构设计,提供了从硬件配置、串口与定时器移植到FreeRTOS操作系统适配的完整实战指南,并分享了数据缓冲区管理、多线程协同及高级调试技巧,为构建稳定可靠的工业通信网关提供了系统化解决方案。

weixin_29194255的博客 372

Claude Code与Codex深度对比:终端AI编程助手选型指南

大语言模型驱动的AI编程助手已成为开发者提效的重要工具,它们基于自然语言交互,自动完成代码生成、重构和调试。这类工具依赖上下文理解与工程实践,不同产品在交互模式、模型接入和任务执行上差异显著。从终端CLI编程场景出发,梳理AI编程助手的设计原理与技术价值,重点对比Anthropic Claude Code与OpenAI Codex在安装配置、上下文管理、第三方模型接入(如DeepSeek)以及高频报错处理上的实际表现。无论你是新手还是资深工程师,理解这些差异有助于根据自身工作流选择合适工具,或在两者间灵活切

weixin_33755649的博客 3132

activity启动service的两种方式

activity启动service的两种方式,Parcelable数据传递

cst_code的博客 4075

Android 以太网802.1x 配置

802.1X认证网络配置摘要:本文介绍了通过wpa_supplicant.conf文件配置802.1X企业网络认证的两种方法:PEAP-MSCHAPv2方式和TLS方式。PEAP方式需设置SSID、用户名、密码,可选择是否验证CA证书;TLS方式则需要配置客户端证书、私钥及CA证书路径。文件配置完成后需设置权限并重启设备。最后提出如何验证802.1X配置是否生效的问题,但未给出具体验证方法。该配置适用于需要802.1X认证的企业网络环境。

zhaoyufei133的博客 458

点击app图标启动过程

1.点击桌面app图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求;2.system_server进程收到请求后,向zygote进程发送创建进程的请求(zygote进程是Android系统的第一个进程,zygote意为受精卵,所有进程都是由它孵化而来)3.zygote进程fork出新的子进程,即App进程;4.App进程,通过Bi...

qq_35647047的博客 1517

【深度学习基础】一篇弄懂训练集、验证集和测试集(呕心沥血版)

在深度学习中,训练集、验证集和测试集是构建和评估模型的核心组成部分。训练集用于模型的学习和参数优化,验证集帮助调整超参数和防止过拟合,而测试集则用于最终评估模型的泛化性能。正确划分和使用这三类数据集,对于开发高效、可靠的深度学习模型至关重要。本文将深入解析它们的作用、划分方法以及在实际应用中的注意事项,帮助你全面理解并掌握数据集的科学使用方法,从而提升模型的实际表现。

十二月的猫 3792

AMD SDP 优快云 系列文章设计

摘要 本文档规划了7篇AMD SDP协议解析系列文章的技术博客设计方案。基于《Scalable Data Port (SDP) Specification》1.5.0版本(122页),面向SoC/NoC领域的RTL设计与验证工程师,构建从基础概念到验证实现的知识体系。 系列文章严格遵循协议规范边界,采用五类证据标签区分内容来源(规范原文、勘误、验证推导等),禁止补充未定义的实现细节。包含端口控制、事务传输、一致性协议等核心内容,最终落实到验证平台设计与覆盖率模型。 每篇文章采用统一模板:明确规范依据、问题导

元直的博客 158

Activity与Service的启动和绑定

Activity提供了用户操作的视图界面,而Service则能在Activity退出时运行在后台,在实际的android应用开发中,经常会用到Activity和Service,它们是如何绑定的呢。 Service的启动:context.startService(Intent i) Service的绑定:context.bindService(Intent service, ServiceConn

洽洽老大的专栏 1437

笔试题-2023-乐鑫-数字IC设计【纯净题目版】

笔试题-2023-乐鑫-数字IC设计【纯净题目版】

w0shishabi的博客 1777

android 在不同Activity启动和关闭Service

我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1Android中不同Activity启动和关闭Service的实现指南 在Android开发中,Service是一种在后台长时间运行的组件,能用于进行后台操作。为了在不同的Activity...

weixin_41535723的博客 170

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

如何启动未经注册的activity和service

涉及到的关键类:ActivityThread,ContextImp,ActivityManager 涉及到的技术:activity启动流程,hook(也就是动态代理),java反射,AMS的交互过程 ActivityThread: ActivityThread位于android.app包下,他是安卓应用的真正入口,以下代码拷贝自android SDK 26中,去掉了注释部分 public...

system_err的博客 750

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Service里面启动Activity和Alertdialog

如果Service并没有绑定Activity 一、启动Activity 启动Activity需要加上Intent.FLAG_ACTIVITY_NEW_TASK,因为此时还没有存在任务栈,需要重建一个任务栈。 Intent intent = new Intent(); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setClas

lwklan的专栏 285

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Activity怎么和service绑定,怎么在activity中启动自己对应的service

1. Activity通过bindService(Intent service, ServiceConnection  conn, int flags)跟Service进行绑定。     2. 绑定成功以后,Service会将代理对象通过回调的形式传递给MyServiceConnection,这样我们就获取Service提供的代理对象

丿灬安之若死 4953

Android service里面启动activity和alertdialog

本文转自:Android service里面启动activity和alertdialog一、启动activity源码:(记得要加上Intent.FLAG_ACTIVITY_NEW_TASK)Intent intent = new Intent(); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setClass(getApplicati

zcn596785154的博客 499

84.定义一个Service (启动和停止Service) [Activity和Service通信]

• startService():启动 Service 后,Service 独立运行,即使启动它的组件被销毁,Service 也会继续执行任务。• bindService():用于客户端与 Service 建立绑定通信,客户端可以通过 Service 提供的接口与 Service 交互。当所有客户端解绑后,Service 会被销毁。当应用启动时,会显示你的 MainActivity 界面,界面上有两个按钮,分别是 "Start Service"(启动服务)和 "Stop Service"(停止服务)。

2303_79132118的博客 383

Activity通过bindService启动Service后Activity和Service之间的通信!

最近在看同一个程序中Service的两种驱动方式时,起以Bind启动然后可以进行Service和Activity之间的相互通信。一直没看明白,在翻看SDK时发现一个例子,特别摘抄如下: 这个时BindingService继承自Activity,然后通过点击按钮来启动Service public class BindingService extends Activity { ...

weixin_30362083的博客 78

Service 的两种启动方式和「Service 与 Activity 数据交互」

1. Service 的两种启动方式 Activity 中可以有两种方式启动 Service,不同方式启动时 Service 的生命周期也不一样,现在在 Activity 中定义四个 Button,分别是 startService、stopService、bindService、unbindService,Service 中各生命周期中分别打印 Log 日志,通过日志查看生命周期执行情况: // ...

lk_123456的专栏 808

Activity的生命周期流程以及Activity的启动模式,Activity和组件、Service、Fragment的通信

正常的流程: onCreate():被创建的时候被回调, onStart():Activity正在启动状态,处于可见但无法交互,但处在后台 onResume():已经在前台可见,可以和用户交互,Activity已经在运行 onPause():Activity正在停止,和onResume()成对出现 onStop():即将停止,或被新的Activity覆盖,Activity不可见,在后台运行 onDestory():Activity正在被销毁,回收和资源的释放,和onCreate()成

weixin_43500320的博客 217

android89--Activity怎么和service绑定,怎么在activity中启动自己对应的service

startService() 一旦被创建  调用着无关   没法使用service里面的方法 bindService () 把service 与调用者绑定 ,如果调用者被销毁,service会销毁 bindService() 我们可以使用service里面的方法          bindService().  让activity能够访问到 service里面的方法          构建

开心果 2603

显式和隐式启动Activity、Service

Intent寻找目标组件的两种方式: 显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的。隐式Intent:通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下,一般是用于在不同应用程序之间。 1.显式启动Activity: //显示方式声明Intent,直接启动Sec

what93的博客 4575

Android 在 Service 启动 Activity 和 Dialog

在 Activity 中其中 startActivity 这个大家应该是非常熟悉的。那么从 Service 里面调用 startActivity 话,会怎么样呢?会出现下面的异常:android.util.AndroidRuntimeException: Calling star

kaiyuanheshang的博客 7533
上一篇: Android内存优化
下一篇: Android和Java的垃圾回收
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值