Activity的简介

一、Activity在项目结构中的位置及作用
角色:连接View层与Service的一个中间环节
主要工作:A.抓取界面数据
B.将service层产生的数据显示在
View层
Service层 ---- 数据计算 ---
 ---- 暴露Dao层 --
 ---- 存放Service组件

二、Activity跳转 --- Intent
一般情况,一个程序界面有多个,不同的界面之间需要
进行跳转,界面的跳转,一般都对应Activity的跳转


A.有对应的Activity以及界面文件
B.在清单文件内进行配置Activity
C.清单文件application中设置了默认的图标与文本
  另外,Activity可以自定义图标和文本
  如果没有自定义,使用默认
常用跳转方式:
1、直接指定源与目的Activity
setClass
一般用于当前项目下跳转
2、直接指定程序以及目的Activity
setClassName(packageName   activityName)
packageName时程序员安装的包名这个包名具有惟一性,那么就可以根据包名找到对应的程序


指定包名,指定界面 ---- 
缺点:
A、死代码 --- 耦合性太高
B、灵活性差
3、泛指符合条件的Activity
A、setAction(name)
B、符合条件的Activity在清单文件中也要指定对应的name的都是可以被唤醒的Activity
Action name --- 配置在Activity的intent filter当中
C、添加CateGory==添加附加的筛选信息
setActivity(“大学”);
CateGory(“武器制造”)进一步筛选
<activity   name ="大学">
<IntentFilter  action ="大学">
<Category  default>


一般CateGory都是default

D、保险起见代码内部也添加CateGory
  addCateGory();
E、CateGory --- 提供附加条件


三、Intent携带数据的方式:
1、putExtra
2、putExtras(Bundle)
前两种方式比较:
A.数据较少,使用putExtra,效率高
B.第二种方式封装性更好 --- 数据是调用
其他函数产生的,那么可以让这个函数返回
Bundle对象
3、setData()
打电话 "tel: 124"


A.被调用的Activity在清单文件中声明协议
B.被调用的Activity还需要实现解析符合协议 数据
C.调用者要按照协议传输数据


调用系统的Activity,并且传递数据

打电话:
setAction --- 版本改变,包名会改
setData ----- "tel:"电话号码
schmale  host  
权限 -------- 打电话、联网、发短信
     获取联系人 
"sms:"


解析数据:
1、获取Intent --- getIntent
2、根据键获取值
  传递的键与解析的键必须完全一致


发短信
打电话案例


1、<intent-filter>
在Activity标签当中的配置标签,它对Intent起到过滤作用,只有符合filter内部的配置信息,才可以访问
2、数据配置条件
scheme ---- 协议
host ------ 主机 配置Uri前跟 //
port ------ 端口号     :
path ------ 路径 清单文件配置时前跟 /
jdbc:mysql://localhost:8080/74db

注意:配置顺序 从前到后,如果前面的没有配置后面的配置无效


mimeType --- 配置数据类型 -- 
A.配置格式:“AAA/BBB”
B.调用格式:setDataAndType (uri,"a/b");
setData()和setType()
当同时需要设置Data和Type时,后面的会覆盖前面的,所以必须使用setDataAndType


3、筛选条件
action ---- 只要有一个符合即可
categroy -- 额外信息


填志愿 ----- 复旦 南开 北大 清华
setAction("XXX"); 1 2 3 4 --- 北京
setCategroy -- 车载模式 3 --- 古生物学




返回数据:
1、源:startActivityForResult
2、目的:setResult
设置结果
3、onActivityResult
回调函数,被其他对象调用的
重写此函数,完成相关功能 --- 数据回显


请求码: onActivityResult只有一个,可以根据请求码的不同做出相应处理
返回码:由于操作结果不同,那么可以设置不同的结果码,根据结果码进行相应操作
默认结果码是0

发送短消息
注意:1、SmsManager导包
     2、对短信进行分割处理
     3、send函数的参数:
参数1:电话号码
参数2:不支持
参数3:短信内容
参数4:发送状态
参数5:接收状态
调用系统发送短信功能:
setAction(SEND_SMS);
SetData ---- "mms:" + 电话号码


三、Activity的生命周期
1、生命周期控制函数
onCreate --- 创建时调用 --- 将Activity加载进内存
onStart ---- 开始 -- 可见
onResume --- 获取焦点


onPause ---- 失去焦点,但可见
onStop ----- 停止 -- 当前Activity不可见

onDestroy -- 将Activity从内存清除


一般情况:Activity一个生命周期中,只会加载一次,但是特殊情况除外 ---- 内存接近临界时 -- 可能会被销毁 --- 如果要再次调用,那么重新调用onCreate函数

注意:1、onCreate被二次调用的情况
     2、如果覆盖当前Activity的窗体,整个覆盖与局部覆盖两种情况 --- 当被覆盖的Activity重新回到前台时,调用的函数


特殊情况:屏幕状态切换
横竖屏切换的底层实现:
1、将当前Activity销毁
2、重新加载新的Activity
导致的问题:
程序运行到一半,随着屏幕的切换,必须重新开始
解决方案:
1、关闭屏幕切换
2、在对应的函数内,保存进度,然后当新运行时Activity时,在相应的函数内读取并加载进度  


四、Activity的加载模式
清单文件中配置:
android:lunchMode

1、标准加载模式:
每开启一个Activity,那么就往栈顶存入一个Activity,返回时,每个Activity都必须被一一清除,才可以返回桌面,这是默认模式
2、singleTop
加载Activity时,会检查栈顶,如果有就不加载
3、SingleTask
A.如果栈内没有Activity,加入
B.如果栈内有这个Activity,那么就将这个Activity之上的所有Activity清空
4、singleInstance
SingleInstance的Activity单独占有一个栈,
并且这个栈内只有当前一个实例,它在进行切换时,实际是栈的排列顺序的切换,返回时,弹出Activity时,栈也消失
五、其他
回调函数,在A中,但是被B调用
1、回调函数使用时机
案例:随手指运动的小球
2、回调函数的传播
以onTouchEvent为例:
View 和 Activity都有此回调函数,当事件产生时,首先调用的底层(view)的onTouchevent,如果此时返回true,那么意味着,这个事件处理完成,不需要再调用Activity的onTouchEvent了,如果返回false,意味着事件没有被处理完,需要被Activity的onTouchEvent继续处理
返回值有关
true ---- 
false --- 


如果内层的onTouchEvent返回false,那么只能处理按下的动作,松开的动作被传递到外层处理,又由于Activity的onTouchEvent是处理的最外层,无论返回true或false,都会既处理按下,又处理松开

3、Menu
A、一般菜单选项
B、带有子菜单的菜单选项
菜单的响应 --- groupId 与 ItemId 组合

ContextMenu -- 长按View控件生成的菜单

Fragment

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章