Android核心基础-四大框架Activty

<p>Activity</p><p> <span style="white-space:pre">	</span><span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">Activity可以翻译为活动,我觉得他的核心意思就是想提供给用户一个可交互的界面,从而让APP“活”起来。<span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">Activity也是APP的最主要的入口,所以我个人认为他也是四大组件里最重要的一个。虽然现在的APP里的<span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">Activity的数量可能会越来越少,不过他依然是最最重要的一部分,对于初学者来讲,一个简单普通的应用可以没有</span></span></span>Service、</p><p>广播,和provider  但是不可能没有<span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">Activity!</span></p><p>
</p><p><span style="white-space:pre">	</span>启动<span style="font-family: 'Times New Roman';">Activity</span><span style="font-family:宋体;">有两种方法,第一种是快捷方式启动(点击图标),第二种是意图调用(</span><span style="font-family:Times New Roman;">Intent</span><span style="font-family:宋体;">)</span></p><p>创建<span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">:</span></p><p>	1<span style="font-family:宋体;">)定义类继承</span><span style="font-family:Times New Roman;">Activiyt,</span></p><p>	2<span style="font-family:宋体;">)在清单文件中的</span><span style="font-family:Times New Roman;"><application></span><span style="font-family:宋体;">节点中声明</span><span style="font-family:Times New Roman;"><activity></span></p><p>显式意图和隐式意图:</p><p>	显式意图:</p><p>		概念:显式意图是给创建的意图指定类,通过字节码或者全类名来启动<span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">。</span></p><p>		创建方法:</p><p>			1<span style="font-family:宋体;">)创建</span><span style="font-family:Times New Roman;">Intent</span><span style="font-family:宋体;">对象,在构造函数内传入</span><span style="font-family:Times New Roman;">this</span><span style="font-family:宋体;">和想要调用的</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">的类字节码,</span></p><p>			2<span style="font-family:宋体;">)</span><span style="font-family:Times New Roman;">startActivity(</span><span style="font-family:宋体;">刚刚创建的</span><span style="font-family:Times New Roman;">Intent</span><span style="font-family:宋体;">对象</span><span style="font-family:Times New Roman;">)</span><span style="font-family:宋体;">。</span></p><p>	隐式意图:</p><p>		隐式意图是通过过滤清单文件中<span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">所注册的</span><span style="font-family:Times New Roman;"><intent-filter></span><span style="font-family:宋体;">来启动,想要被隐式意图过滤出来,需要在</span><span style="font-family:Times New Roman;"><intent-filter></span><span style="font-family:宋体;">标签中建立三个子标签</span></p><p>			1<span style="font-family:宋体;">):</span><span style="font-family:Times New Roman;"><action android:name="android.intent.action.VIEW"/> <--!</span><span style="font-family:宋体;">这个是不变的!</span><span style="font-family:Times New Roman;">--></span></p><p>			2<span style="font-family:宋体;">):</span><span style="font-family:Times New Roman;"><data android:scheme="</span><span style="font-family:宋体;">类型(</span><span style="font-family:Times New Roman;">http</span><span style="font-family:宋体;">或者</span><span style="font-family:Times New Roman;">MP3</span><span style="font-family:宋体;">等等)</span><span style="font-family:Times New Roman;">"/></span><span style="font-family:宋体;">。</span></p><p>			3<span style="font-family:宋体;">):</span><span style="font-family:Times New Roman;"><category android:name="android.intent.category.DEFAULT">//<--!</span><span style="font-family:宋体;">这个也是不变的。</span><span style="font-family:Times New Roman;">--></span></p><p>		创建方法:</p><p>			1<span style="font-family:宋体;">)创建</span><span style="font-family:Times New Roman;">Intent</span><span style="font-family:宋体;">的空参对象,</span></p><p>			2<span style="font-family:宋体;">)用</span><span style="font-family:Times New Roman;">setAction</span><span style="font-family:宋体;">来指定动作,</span></p><p>			3<span style="font-family:宋体;">)用</span><span style="font-family:Times New Roman;">setData</span><span style="font-family:宋体;">或</span><span style="font-family:Times New Roman;">setDataAndType()</span><span style="font-family:宋体;">来指定数据和数据类型,</span></p><p>			4<span style="font-family:宋体;">)</span><span style="font-family:Times New Roman;">startActivity(</span><span style="font-family:宋体;">刚刚创建的</span><span style="font-family:Times New Roman;">Intent</span><span style="font-family:宋体;">对象</span><span style="font-family:Times New Roman;">)</span><span style="font-family:宋体;">。</span></p><p> </p><p>Bundle<span style="font-family:宋体;">:</span></p><p>	在意图中封装了一个<span style="font-family:Times New Roman;">Bundle</span><span style="font-family:宋体;">对象,可以再意图中传递对象, </span><span style="font-family:Times New Roman;">Bundle</span><span style="font-family:宋体;">是一个</span><span style="font-family:Times New Roman;">map</span><span style="font-family:宋体;">集合可以用</span><span style="font-family:Times New Roman;">intent.putExtra()</span><span style="font-family:宋体;">方法来向</span><span style="font-family:Times New Roman;">Bundle</span><span style="font-family:宋体;">中装入数据。在意图所启动的</span><span style="font-family:Times New Roman;">Acitiviyt</span><span style="font-family:宋体;">中可以用</span><span style="font-family:Times New Roman;">intent.getIntExtra()</span><span style="font-family:宋体;">等方法来取出之前所装入的数据</span><span style="font-family:Times New Roman;">.</span></p><p>	注意:<span style="font-family:Times New Roman;">Bundle</span><span style="font-family:宋体;">中只能存入可以被系列化的对象或者基本数据</span></p><p> </p><p>Result<span style="font-family:宋体;">等待回传:</span></p><p>	在用意图跳转<span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">时可以使用</span><span style="font-family:Times New Roman;">startActivityForResult()</span><span style="font-family:宋体;">方法来等待新创建的</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">返回数据,重写</span><span style="font-family:Times New Roman;">onActivityResult()</span><span style="font-family:宋体;">方法,方法中有一个参数是</span><span style="font-family:Times New Roman;">Intent data </span><span style="font-family:宋体;">就是新</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">回传的数据。新</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">运行</span><span style="font-family:Times New Roman;">setResult()</span><span style="font-family:宋体;">来设置要回传的数据,当新</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">被关闭时就会调用</span><span style="font-family:Times New Roman;">onActivityResult</span><span style="font-family:宋体;">方法。 (方法内可以传认证码),</span></p><p> </p><p>生命周期:</p><p>	Activity<span style="font-family:宋体;">一共有三种存活状态:</span></p><p>		1<span style="font-family:宋体;">)运行:</span><span style="font-family:Times New Roman;">activity</span><span style="font-family:宋体;">在最前端,正在运行。</span></p><p>		2<span style="font-family:宋体;">)停止:</span><span style="font-family:Times New Roman;">activity</span><span style="font-family:宋体;">不可见,在后台运行,被其他的</span><span style="font-family:Times New Roman;">activity</span><span style="font-family:宋体;">完全不该。</span></p><p>		3<span style="font-family:宋体;">)暂停:</span><span style="font-family:Times New Roman;">activity</span><span style="font-family:宋体;">可见,但是上一层还有其他的</span><span style="font-family:Times New Roman;">activity</span><span style="font-family:宋体;">,没有被完全覆盖掉。</span></p><p>	Acitivity<span style="font-family:宋体;">声明周期的方法:</span></p><p>		onCreate 	:创建时调用,或者程序在暂停、停止状态下被杀死之后重新打开时也会调用</p><p>		onStart		:<span style="font-family:Times New Roman;">onCreate</span><span style="font-family:宋体;">之后或者从停止状态恢复时调用</span></p><p>		onResume	:<span style="font-family:Times New Roman;">onStart</span><span style="font-family:宋体;">之后或者从暂停状态恢复时调用,从停止状态恢复时由于调用</span><span style="font-family:Times New Roman;">onStart</span><span style="font-family:宋体;">,也会调用</span><span style="font-family:Times New Roman;">onResume</span></p><p>		onPause		:进入暂停、停止状态,或者销毁时会调用</p><p>		onStop		:进入停止状态,或者销毁时会调用</p><p>		onDestroy	:销毁时调用</p><p>		onRestart	    :从停止状态恢复时调用</p><p>
</p><p>
</p><p>	个人理解</p><p><span style="white-space:pre">	</span>一个Activity从 死亡状态 到 停止状态 会运行<span style="font-family:Times New Roman;">onCreate</span><span style="font-family:宋体;">方法, (在这里做初始化的工作)</span></p><p>		    从 停止状态 到 暂停状态 会运行<span style="font-family:Times New Roman;">onStart</span><span style="font-family:宋体;">方法, </span></p><p>		    从 暂停状态 到 运行状态 会运行<span style="font-family:Times New Roman;">onResume</span><span style="font-family:宋体;">方法,</span></p><p>		    从 运行状态 到 暂停状态 会运行<span style="font-family:Times New Roman;">onPause</span><span style="font-family:宋体;">方法,</span></p><p>		    从 暂停状态 到 停止状态 会运行<span style="font-family:Times New Roman;">onStop</span><span style="font-family:宋体;">方法。</span></p><p>		    从 停止状态 到 死亡状态 会运行<span style="font-family:Times New Roman;">onDestroy</span><span style="font-family:宋体;">方法。(在这里做保存数据的工作)</span></p><p>		    如果程序的生命存在过运行状态那么,从停止状态到暂停状态的时候会运行<span style="font-family:Times New Roman;">onRestart</span><span style="font-family:宋体;">,如果从来没存在过运行状态的话,就不会调用</span><span style="font-family:Times New Roman;">onRestart</span><span style="font-family:宋体;">。</span></p><p> </p><p>		</p><p> </p><p>横竖屏的切换周期:</p><p>	安卓系统下默认的横竖屏幕切换的动作时把之前的<span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">销毁,然后在创建新的符合屏幕状态的</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">。</span></p><p>	sereenOrientation="landscape/portrait"<span style="font-family:宋体;">指定横</span><span style="font-family:Times New Roman;">/</span><span style="font-family:宋体;">竖屏幕,不可更改</span></p><p>	configChanges="orientation|keydoardHidden|screenSize" <span style="font-family:宋体;">指定 屏幕旋转时不会从新创建,不会因为键盘而挡住主屏幕,不会因为屏幕的大小缩放</span></p><p>启动模式:</p><p>	在<span style="font-family:Times New Roman;">AndroidManifest.xml</span><span style="font-family:宋体;">中的</span><span style="font-family:Times New Roman;"><activity></span><span style="font-family:宋体;">标签中可以配置</span><span style="font-family:Times New Roman;">android:launchMode</span><span style="font-family:宋体;">属性,用来控制</span><span style="font-family:Times New Roman;">Actvity</span><span style="font-family:宋体;">的启动模式</span></p><p>	在Android系统中我们创建的Acitivity是以栈的形式呈现的</p><p>		standard<span style="font-family:宋体;">:每次调用</span><span style="font-family:Times New Roman;">startActivity()</span><span style="font-family:宋体;">启动时都会创建一个新的</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">放在栈顶</span></p><p>		singleTop<span style="font-family:宋体;">:启动</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">时,指定</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">不在栈顶就创建,如在栈顶,则不再创建</span></p><p>		singleTask<span style="font-family:宋体;">:如果启动的</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">不存在就创建,如果存在直接跳转到指定的</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">所在位置</span></p><p>		singleInstance<span style="font-family:宋体;">:如果启动的</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">不存在就创建,如果存在就将指定的</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">移动到栈顶</span></p><p><span style="font-family:宋体;">
</span></p><p><span style="font-family:宋体;">
</span></p><p><span style="font-family:宋体;"></span><pre name="code" class="java"><p><span style="white-space:pre">		</span>onSaveInstanceState<span style="font-family: 宋体;">:在</span><span style="font-family: 'Times New Roman';">Activity</span><span style="font-family: 宋体;">被动的摧毁或停止的时候调用,用于保存运行数据,可以将数据存在在</span><span style="font-family: 'Times New Roman';">Bundle</span><span style="font-family: 宋体;">中</span></p><p>		onRestoreInstanceState<span style="font-family: 宋体;">:该方法在</span><span style="font-family: 'Times New Roman';">Activity</span><span style="font-family: 宋体;">被重新绘制的时候调用,例如改变屏幕方向,</span><span style="font-family: 'Times New Roman';">savedInstanceState</span><span style="font-family: 宋体;">为</span><span style="font-family: 'Times New Roman';">onSaveInstanceState</span><span style="font-family: 宋体;">保存的数据</span></p>



                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android核心分析之一--------分析方法论探讨之设计意图..........................................1 Android核心分析之二-------方法论探讨之概念空间篇..............................................3 Android是什么之三-------手机之硬件形态.....................................................................5 Android核心分析之四---手机的软件形态......................................................................6 Android核心分析之五-----基本空间划分....................................................................7 Android核心分析之六-----IPC框架分析Binder,Service,Servicemanager.....11 Android核心分析之七------Service深入分析..............................................................21 Android核心分析之八------Android 启动过程详解...................................................31 Android核心分析之九-------ZygoteService..................................................................36 Android核心分析之十-------AndroidGWES之基本原理篇.......................................40 Android核心分析之十一-------AndroidGWES之消息系统.......................................43 Android核心分析(12)-----AndroidGEWS窗口管理之基本架构原理......................48 Android核心分析(13)-----AndroidGWES之Android窗口管理...............................50 Android核心分析(14)------AndroidGWES之输入系统..........................................57 Android核心分析(15)--------Android输入系统之输入路径详解..............................59 Android核心分析(16)-----Android电话系统-概述篇...............................................66 Android核心分析(17)------电话系统之rilD............................................................69 Android核心分析(18)-----Android电话系统之RIL-Java........................................76 Android核心分析(19)----电话系统之GSMCallTacker.............................................84 Android核心分析(20)----Android应用程序框架之无边界设计意图.......................87 Android核心分析(21)----Android应用框架AndroidApplication.......................88 Android核心分析(22)-----Android应用框架Activity..........................................93 Android核心分析(24)-----AndroidGDI之显示缓冲管理.........................................104 Android核心分析(25)------AndroidGDI之共享缓冲区机制................................112 Android核心分析(26)-----AndroidGDI之SurfaceFlinger.....................................116 Android核心分析(27)-----AndroidGDI之SurfaceFlinger之动态结构示意图..123 Android核心分析(28)-----AndroidGDI之Surface&Canvas..................................126

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值