四大组件之---全面了解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状态)

原文地址:https://www.cnblogs.com/ljstudy/p/14586041.html