Activity生命周期和启动模式 - Android开发艺术探索读书笔记(第一章)

本文详细解读了Android Activity的生命周期管理及四种启动模式,包括标准模式、栈顶复用模式、栈内复用模式和单实例模式,同时讨论了Activity任务栈与TaskAffinity参数的作用,以及IntentFilter匹配规则的使用。


提要:终于有时间着手阅读这本书啦,良心之作,必须好好研究下,于是决心做起读书笔记,一些个人的见解,希望帮助到其他小白理解的同时自己也能坚持续更下去,坚持,难能可贵,一起加油啦~

 

第一章 - Activity生命周期和启动模式

 

1.1 - 生命周期的全面分析

    重点 - 生命周期变化、异常结束与正常结束

 

1、回想这几种情况,生命周期如何?

   onCreate 初始化、加载布局资源、加载所需数据

   onStart 后台可见,但看不到,不可交互

   onResume 前台可见

   onPause  一般onStop会紧接着调用,极端情况,快速返回原本activity、,onStop就不掉用了,直接可以onResume

   onStop 不可见时候调用,返回时候onRestart、onStart、onResume- 可轻度回收资源

   onDestory 销毁 - 最终回收资源



2、 第一次启动然后正常结束(csr  psd)、----括号里面偷懒用了简写(onCreate、onStart。。。)~

    打开新的activity或者home键返回桌面(ps csr)、、

    再次会到原activity(rsr psd)

   

3、onCreate与 onDestory配对

   onStart 与onStop配对(是否位于后台的角度来调用)

   onResume 与onPause配对(是否位于前台的角度来调用)

 

4、异常结束?

   onSaveInstanceState来保存当前状态(onStop之前调用,与onPause比较就比较不确定)

   onRestoreInstanceState来恢复当前状态(onStart之后调用)

 

5、阻止系统重新创建Activity。AndroidMenifest.xml里Activity标签加入configChanges属性(例如android:configChanges = "orientation" 防止屏幕旋转时候重新加载)

    P14 有该属性各种项目和含义

    另(拓展):!设置了android:configChanges 属性后,原本需要重新创建时候,会直接调用onCreate方法中的onConfigurationChanged方法,而不会重新执行onCreate方法

 

6、如果后台工作不在四大组件而独立运行与后台,很容易被杀死。建议将后台工作放入Service中保证进程有一定优先级

 

1.2 - Activity启动模式

    重点 - 启动模式、标志位

 

1、四种启动模式(AndroidMenifest里面Activity属性可设置 lanuchMode=“singleTask”)

 

   standard、 标准模式

    ①系统默认启动模式

    ②不论存在与否,都会重新创建一个新的实例

    ③多实例实现,谁启动了这个Activity、那么这个Activity就运行在启动它那个Activity所在栈

 

   singleTop、栈顶复用模式(运用:让后台运行的Activity回到前台并传递一些数据)

    ①判断需要启动的Activity是否为任务栈栈顶 ,如果是,则不会重新创建,如果不是,则会重新创建

    ②注意、不重新创建时候,该Activity的 onNewIntent(Intent intent) 方法会被回调,通过该方法的参数,可以取出当前请求的信息;

       第一次启动时候:onCreate()---->onStart()---->onResume()

       再次启动时候:onNewIntent()---->onResart()------>onStart()----->onResume()

    ③注意、系统可能会杀死该Activity,杀死之后,启动情况与第一次启动相同,所以有必要在onCreate与onNewIntent方法中调用同一个处理数据的方法

    另(拓展):!onNewIntent调用时机:

   http://www.cnblogs.com/zenfly/archive/2012/02/10/2345196.html

 

   singleTask、栈内复用模式 - 单实例模式?

    ①判断Activity所需任务栈内是否已经存在,如果存在,就把该Activity切换到栈顶(会导致在它之上的都会出栈)

    ②如果所需任务栈都不存在,就会先创建任务栈再创建该Activity

    ③可以理解为 顶置Activity+singleTop 的模式

       第一次模式:onCreate()---->onStart()---->onResume()

       再次启动时候:顶置Activity后,onNewIntent()---->onResart()------>onStart()----->onResume()

   

   singleInstance、单实例模式 - 加强的singleTask模式

    ①拥有singleTask的所有特性之外,此模式Activity只能单独地位于一个新的任务栈中

    ②也就是,Activity启动之后,就会独自在一个新的任务栈中,下次肯定不会重新创建该Activity,除非被系统杀死

       第一次模式:创建一个新栈并入栈、onCreate()---->onStart()---->onResume()

       再次启动时候:onNewIntent()---->onResart()------>onStart()----->onResume()

   

2、Activity所需任务栈 - 与参数TaskAffinity(译为:任务相关性)

    ①该参数标识了一个Activity所需要的任务栈的名字(默认情况下,任务栈名字为应用的包名),当然也可以为每个Activity单独指定TaskAffinity属性。

    ②任务栈分为:前台任务栈、后台任务栈(该栈内Activity位于暂停状态,用户可以通过切换将其调到前台)

   

    注意两种情况:

   ①TaskAffinity与singleTask启动模式配对使用

       TaskAffinity是具有该模式的Activity的目前任务栈的名字,待启动的Activity会运行在名字与TaskAffinity相同的任务栈

   ②TaskAffinity与allowTaskReparenting结合

       A应用中打开、B应用中的、Activity C ,那么C会存在于A应用的任务栈中,此时Home返回桌面,点击应用B,C会被转移到B应用的任务栈中

       

3、两种指定启动模式的方式

   ①AndroidMenifest的activity标签中 android:launchMode

   ②Intent中设置intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    区别:第②种方式优先级要高于第①种方式;

             第①种方式无法为Activity设定FLAG_ACTIVITY_CLEAR_TOP,第②种方式无法为Activity指定singleInstance



4、标记位Flags

    P27

    使用标记位时候,要注意有些标记位是系统内部使用的,应用程序不需要手动去设置这些标记位。

 

5、IntentFilter匹配规则

 

    显式调用:

   Intent intent=new Intent(MainActivity.this, SecondActivity.class);

   startActivity(intent);

 

    隐式调用:

    需要添加过滤器intentfilter

   Intent intent=new Intent("com.example.android.tst.SecondActivity");

   startActivity(intent);

 

   activity标签里

   <intent-filter>标签可以有多个,只要完全匹配其中一个就可以

   ①action(至少有一个) 必须和过滤规则中的其中一个相同 区分大小写;

   ②category(可以没有、可以多个)intent中可以不存在category,系统会默认加上一个android.intent.category.DEAFAULT,但如果存在就必须匹配其中一个;

   ③data()data由两部分组成,mimeType(媒体类型)和URI,要求和action相似。如果没有指定URI,URI但默认值为content和file(schema);

 

 

 

 


内容概要:本文介绍了一个基于冠豪猪优化算法(CPO)的无人机三维路径规划项目,利用Python实现了在复杂三维环境中为无人机规划安全、高效、低能耗飞行路径的完整解决方案。项目涵盖空间环境建模、无人机动力学约束、路径编码、多目标代价函数设计以及CPO算法的核心实现。通过体素网格建模、动态障碍物处理、路径平滑技术多约束融合机制,系统能够在高维、密集障碍环境下快速搜索出满足飞行可行性、安全性与能效最优的路径,并支持在线重规划以适应动态环境变化。文中还提供了关键模块的代码示例,包括环境建模、路径评估CPO优化流程。; 适合人群:具备一定Python编程基础优化算法基础知识,从事无人机、智能机器人、路径规划或智能优化算法研究的相关科研人员与工程技术人员,尤其适合研究生及有一定工作经验的研发工程师。; 使用场景及目标:①应用于复杂三维环境下的无人机自主导航与避障;②研究智能优化算法(如CPO)在路径规划中的实际部署与性能优化;③实现多目标(路径最短、能耗最低、安全性最高)耦合条件下的工程化路径求解;④构建可扩展的智能无人系统决策框架。; 阅读建议:建议结合文中模型架构与代码示例进行实践运行,重点关注目标函数设计、CPO算法改进策略与约束处理机制,宜在仿真环境中测试不同场景以深入理解算法行为与系统鲁棒性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值