<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>
Android核心基础-四大框架Activty
最新推荐文章于 2023-03-19 11:31:41 发布