一、android中的Activity组件
- 如何开发多界面的应用:
需要有 多个activity ,默认的情况下 每个acitivity 就是一个界面 ,每个activity 在创建的时候 , 需要 指定一个 界面 ( 这个界面 就是layout 文件夹 下 的 布局 文件 ),每个acitivity 在写好了之后 , 必须要 到 清单 文件中 进行 声明 , 这样系统 才可以找到 这个Acitivity. 否则 就会 抛异常 . - 由 一个界面 跳到 另外一个 界面的时候, 可以通过 intent (意图 ) 来实现
//显示意图
Intent intent=new Intent( );
intent.setClass(this,SecondActivity.class);
//启动intent
startActivity( intent);
- 一个程序多个入口,要在清单文件中配置多个Main和LAUNCHER:
a、正常情况
image.pngb、多入口情况
image.png-
人品计算器中的一些注意事项
a、finsh( );方法的使用 ,能够结束程序,退回到手机的主界面 。
b、获取sex数据的方法
image.png
c、intent携带参数
image.png
d、获取intent携带的参数
image.png
二、intent意图
Intent : 意图 用来 描述 你的 代码 具体想做什么,是Android 中 激活组件的一个 纽带 .
Intent 分类 两大类 :
-
显式 意图 ---- 明确的 告诉要 激活什么样的组件 ---- 最终激活就只有那么一个组件
-
隐式意图 ---- 没有明确告诉到底想激活哪个组件 ----- 可以 有 多个 能够 被 激活的 组件显示出来 .
注意:显式 意图 一般用在应用程序 内部。
a、显示意图
image.png
清单中的配置代码:
image.png
b、隐式意图(要配置intent-filter意图过滤器)
image.png
同时还需要在清单文件中配置 action和category:
image.png
三、激活系统浏览器
注:要将系统浏览器,清单文件中的
/* <action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:scheme="about" />
<data android:scheme="javascript" />*/
这些代码,在意图对象中设置。
image.png四、一键短息分享
image.png五、短息助手
当启动 activity 还为了 拿到 结果的时候 , 应该 调用StartActivityForResult(); 结合 setResult()和onActivityResult();这个方法StartActivityForResult()会在结束时调用onActivityResult()方法去接收反回的结果。
image.png
六、activity的生命周期
1、执行顺序:
image.png2、横竖屏切换时的生命周期:
默认的情况下, 当横竖屏切换的时候 , activity会被销毁, 然后 重新再次创建 .但是 你明确告诉了 不要 因为 横竖屏 切换 而去影响到 activity的生命周期。
例如, 在播放视频的时候 , 本来是竖直的, 现在横屏了 , 那么 应该 继续 播放, 那么这个时候 就要明确的 不要重新创建activity .
这可以通过 清单文件里的配置来实现
两种实现方式:
- 配置 只能 横屏(landscape), 或者只能竖屏(portrait );
- 配置 横竖屏切换 , 不受 影响
七、Activity的启动模式
任务栈
task 和 stack
- task --任务
一个应用程序可以拥有多个activity,每一个activity就是用来处理用户交互之间的任务。
- stack ---栈
就是用来记录用户打开了哪些界面,拥有哪些任务。如果一个stack中的任务已经全部清除了,那么代表这个应用程序就退出了。一旦哪一个界面执行了销毁的动作,实际上就是执行了出栈的动作。
栈 是一种数据结构 遵循后进先出的规则 队列(Queue) 也是一种数据结构 遵循先进先出的规则
Activity的启动模式
- standard
默认的启动模式 , 启动多少次界面,就会有多少个界面的实例被压到栈中。
- singleTop
单一顶部模式 , 如果当前界面的实例位于栈顶,那么将不会再创建该实例压入栈中,而是重用当前栈顶的实例。只要不是为与栈顶,就与默认的启动模式一样。
应用场景: 一般是用来避免出现一些奇怪的现象。 短信的编写界面使用这个模式
- singleTask
单一任务模式 , 如果要启动的界面实例已经位于栈中,那么这个时候讲重用以前的实例,并且把该实例与栈顶之间的其他界面实例全部移除。相当于是直接让以前的实例位于栈顶。 如果当前界面位于栈顶,那么也不会再次创建实例。
应用场景: 如果哪一个界面比较消耗内存和CPU的开销,那么久做成singleTask的启动模式 , 浏览器的界面使用的是这个模式。
- singleInstance
全局唯一模式 , 启动的界面会存放在单独的一个任务栈中,这个栈里面有且只能有它自己一个实例,以后还想启动这个界面,只需要切换显示不同的任务栈即可。不会再次创建这个界面的实例。
应用场景: 如果一个界面,单位时间内需要创建的实例很多,那么可以做成singleInstance . 来电的界面使用的就是这个启动模式。
网友评论