四大组件之---全面了解Activity的生命周期,启动方式,使用场景
Activity本质:是android界面的载体
一、生命周期:
1、Activity的启动 onCreate->onStart->处于可见状态 2、onResume-->能和用户进行交互 2、Activity的不可见 onPause->onStop 3、Activity的重新可见并可以进行交互 onRestart->onStart->onResume 4、Activity的销毁 onPause->onStop->onDestory onPause:停止当前Activity的各种状态,包括音频视频等
Activity之间相互交互:A.Activity调用B.Activity(在B.activity显示之后才会将A.activity停止(onStop),back键同理)
点击后:
A.onPause--> B.onCreate-->B.onStart-->B.onResume A.onStop
点击back键返回后:
B.onPause-->A.onRestart-->A.onStart-->A.onResume B.onStop-->B.onDestory
流程图:
二、Activity启动方式
1. 显示启动
①最常见的: startActivity(new Intent(当前Act.this,要启动的Act.class));
②通过Intent的ComponentName: ComponentName cn = new ComponentName("当前Act的全限定类名","启动Act的全 限定类名") ; Intent intent = new Intent() ; intent.setComponent(cn) ; startActivity(intent) ;
③初始化Intent时指定包名: Intent intent = new Intent("android.intent.action.MAIN"); intent.setClassName("当前Act的全限定类名","启动Act的全限定类名"); startActivity(intent);
2. 隐世启动
通过Intent-filter的Action,Category或data来实现
3、使用intent进行组件间通信
Intent in = new Intent(FirstActivity.this, ThirdActivity.class); //1.传单个数据 in.putExtra("test","TTIT"); in.putExtra("number",100); //2.传多个数据 Bundle b = new Bundle(); b.putInt("number", 100); b.putString("test", "TTIT"); in.putExtras(b); startActivity(in);
1.FirstActivity启动ThirdActivity Back Stack(回退堆栈) Activity启动模式: startActivityForResult(in, 1001);
2.FirstActivity接受ThirdActivity返回的数据 @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.e("tag", "requestCode =" + requestCode); Log.e("tag", "resultCode =" + resultCode); Log.e("tag", "data =" + data.getStringExtra("back")); } 3.ThirdActivity设置返回的数据 Intent backIn = new Intent(); backIn.putExtra("back", "abcdef"); setResult(1002, backIn);
三、Activity启动模式
standard模式:(默认)
singleTop模式:
在该模式下,如果栈顶Activity为我们要新建的Activity(目标Activity),那么就不会重 复创建新的Activity。
singleTask模式:
与singleTop模式相似,只不过singleTop模式是只是针对栈顶的元素,而singleTask模式 下,如果task栈内存在目标Activity实例,则: 将task内的对应Activity实例之上的所有Activity弹出栈。 将对应Activity置于栈顶,获得焦点。
singleInstance(全局唯一)模式:
是我们最后的一种启动模式,也是我们最恶心的一种模式:在该模式下,我们会为目标Activity分配一 个新的affinity,并创建一个新的Task栈,将目标Activity放入新的Task,并让目标Activity获得 焦点。新的Task有且只有这一个Activity实例。 如果已经创建过目标Activity实例,则不会 创建新的Task,而是将以前创建过的Activity唤醒(对应Task设为Foreground状态)