- 概念:(手机的一屏)一个应用程序中可以包含多个Activity, 不同的Activity展示不同的可操作界面。四大组件之一
四大组件:Activity应用程序组件 Service服务 content Provider内容提供 BroadcastReceiver广播接收器
- 作用:显示用户的界面,监听UI控件的事件
- 如何创建?
- 创建一个类,继承Activity,重写onCreate()用来将Activity显示出来
- setContentView()设置界面布局方式
- 注册
- XML清单文件中完成注册,可用intent-filter指定默认的Activity
<intent-filter>
<action android:name="android.intent.action.MAIN" />
//category用来指定当前activity被执行的环境
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
注意:Main为程序入口配合Launcher一起使用
常用属性值:
Category:
CATEGORY_DEFAULT:Android系统中默认的执行方式,按照普通Activity的执行方式执行。
CATEGORY_HOME:设置该组件为Home Activity。
CATEGORY_PREFERENCE:设置该组件为Preference。
CATEGORY_LAUNCHER:设置该组件为在当前应用程序启动器中优先级最高的Activity,通常为入口ACTION_MAIN配合使用。
CATEGORY_BROWSABLE:设置该组件可以使用浏览器启动。
CATEGORY_GADGET:设置该组件可以内嵌到另外的Activity中。
- Intent作用:启动Activity,组件之间传值
- 启动Activity
- 定义Intent对象
Intent intent = new Intent(当前Activity.this,目标Activity.class);
- 启动Activity
startActivity(intent);
- 页面跳转方式
- 显示Intent意图
Intent intent = new Intent(MainActivity.this,InfoActivity.class);
startActivity(intent);
- 隐式Intent
步骤:1.配置清单文件
<intent-filter>
<action android:name = “activity名称”>
<category android:name =”android.intent.category.DEFAULT”>
</intent-filter>
2.编写代码
Intent intent = new Intent();
Intent.setAction(“activity名称“);
startActivity(intent);
- 传值方式
- 显示Intent意图对象传值
传递基本数据类型(8种)
A:
Intent intent = new Intent(MainActivity.this,InfoActivity.class);
intnet.putExtra(“键”,“值”);
startActivity(intent);
B:
Intent intent = getIntent();
String msg = intent.getStringExtra(“键”);
注意:以上用于传递基本数据类型的数据,如果要传递引用数据类型,则要实现Serializable接口
传递引用数据类型
A:
Intent intent = new Intent(MainActivity.this,InfoActivity.class);
User user = new User(); //User类实现序列化接口
intnet.putExtra(“键”,user);
startActivity(intent);
B:
Intent intent = getIntent();
String msg = intent.getSerializableExtra(“键”);
- 打包数据
A:
Intent intent = new Intent(MainActivity.this,InfoActivity.class);
Bundle bundle = new Bundle();
bundle.putString(key,value);
intent.putExtras(bundle);
startActivity(intent);
B:
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String sex = bundle.getString(key);
- 回传数据
A: startActivityForResult(intent,requestCode);
B: setResult(resultCode,data);//data 是一个Intent对象,用于存入返回的数据
A: 重写父类的方法: onActivityResult(requestCode,resultCode,data);
- 生命周期
- 四种状态:
运行状态:当Activity位于栈顶时,此时正好处于屏幕最前方,此时处于运行状态
暂停状态:当Activity失去了焦点但仍然对用于可见(如栈顶的Activity是透明的或者栈顶Activity并不是铺满整个手机屏幕),此时处于暂停状态
停止状态: 当Activity被其他Activity完全遮挡,此时此Activity对用户不可见,此时处于停止状态
销毁状态:当Activity由于人为或系统原因(如低内存等)被销毁,此时处于销毁状态
onCreate() 第一次创建时调用 初始化Activity
onDestroy() 销毁时执行 销毁Activity
onStart() 显示界面时执行(无论何时只要显示界面都会执行) 显示Activity
onStop() 界面不可见 停止Activity
onPause() 界面可见,但是失去焦点时 停止与用户交互
onResume() 界面可见,并能获得焦点 与用户交互
onRestart() 重新显示界面时执行 重新显示Activity
- 运行界面时: oncreate() onstart() onResume()
- 关闭界面时(按Back键): onpause() onStop() onDestroy()
- 跳转界面时:A中按钮来到B时,假设B全部遮挡住了A,将依次执行A:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onStop
如果点击Back键,将依次执行B:onPause -> A:onRestart -> A:onStart -> A:onResume -> B:onStop -> B:onDestroy
- 界面切到后台时(按Home键):onPause() onStop()
- 横竖屏时:生命周期会受到影响
- Android返回栈:
Android是使用任务(Task)来管理Activity的,一个任务就是一组存放在栈里的Activity集合,这个栈被称作返回栈。
- 设置启动模式
<activity android:launchMode = “”>
值:
Standard:(拿来主意) 每一次点击都会创建一个新的实例, 放入栈的顶端
singleTop:(拒绝堆叠) 可以创建多个实例,但栈顶只能出现一个
优点:防止页出现多次,带来不好的用户体验
singleTask:(独立门户)只能创建一个Activity实例。并且不允许启动栈上方有其它的Activity
singleInstance: (孤独寂寞)当使用这种模式启动的Activity时, 系统会单独分配一个任务.不与其它Activity共享一个栈
- Activity七大属性
action:必须保证action在Android中是唯一
category Activity类型:
android.intent.category.DEFAULT 默认的, 普通的Activity
android.intent.category.LAUNCHER 程序入口, 优先级最高
data 指定action,将必要的数据放入data中
type如果data的数据是文件的路径, 那么需要通过type来指定文件的类型
extra额外数据, 一般用于Intent传值
componentName包装android组件
flag代码设置启动方式