Android四大组件 --- Activity

 

01、 定义

 

Activity是一种可以包含用户界面的组件,主要用于和用户进行交互。一个应用可以包含零个或多个Activity。Android系统是通过Activity栈的形式来管理Activity。

 

02 、Activity的形态

 

1.Active

Activity处于栈顶,可见,可与用户交互;

2.Pause

可见不可交互;Activity失去焦点或者被一个新的非全屏的Activity挡住(注意:Dialog之类的不会影响到当前Activity);

3.Stopped

不可见;如,完全被其他不透明的Activity覆盖掉。

4.Killed

系统回收掉;

 

03 、Activity正常情况下的生命周期

 

生命周期:onCreate() -> onStart() - > onResume() -> onPause() -> onStop() -> onDestroy()

  • 启动activity:系统先调用onCreate(),然后调用onStart(),最后调用onResume()方法,activity进入运行状态。

  • activity其他activity覆盖其上(DialogActivity)或者锁屏:系统会调用onPause()方法,暂停当前activity的执行。

  • 当前activity由被覆盖状态回到前台或者解锁屏:系统会调用onResume()方法,再次进入运行状态。

  • 当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。

  • 用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。

  • 当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。

  • 用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity

  • onRestart():表示activity正在重新启动 ,一般情况下,当前activity不可见重新变成可见状态时,onRestart()就会被调用,这种情形一般是用户行为所导致的,比如用户按HOME键切换到桌面然后重新打开APP或者按back键。

  • onStart()activity可见了,但是还没有出现在前台,还无法和用户交互

  • onPause():表示activity正在停止,此时可以做一些存储数据,停止动画等工作,注意不能太耗时,因为这会影响到新activity的显示,onPause必须先执行完,新的activityonResume才会执行。

  • activity是否可见来说,onstart()onStop()是配对的,从activity是否在前台来说,onResume()onPause()是配对的。

  • activityonPause,然后新activity在启动

注意:当activity中弹出dialog对话框的时候,activity不会回调onPause
然而当activity启动dialog风格的activity的时候,此activity会回调onPause函数

 

04、Activity异常情况下的生命周期


比如当系统资源配置发生改变以及系统内存不足时,activity就可能被杀死。

情况1:资源相关的系统配置发生改变导致activity被杀死并重新创建;
比如说当前activity处于竖屏状态,如果突然旋转屏幕,由于系统配置发生了改变,在默认情况下,activity就会被销毁并且重新创建,当然我们也可以组织系统重新创建我们的activity

系统配置发生改变以后,activity会销毁,其onPauseonStoponDestory均会被调用,由于activity是在异常情况下终止的,系统会调用onSaveInstance来保存当前activity状态,这个方法的调用时机是在onStop之前。与onPause没有既定的时序关系,当activity重新创建后,系统会调用onRestoreInstanceState,并且把activity销毁时onSaveInstanceState方法保存的Bundle对象作为参数同时传递给onRestoreInstanceState和onCreate方法。onRestoreInstanceState()onStart()方法后回调。

同时,在onSaveInstanceStateonRestoreInstanceState方法中,系统自动为我们做了一些恢复工作,如:文本框(EditeText)中用户输入的数据,ListView滚动的位置等,这些view相关的状态系统都能够默认为我们恢复。可以查看view源码,和activity一样,每个view都有onSaveInstanceState方法和onRestoreInstanceState方法

防止重新创建activityactivity指定configChange属性来不让系统重新创建activity
android : configChanges = "orientation"

情况2:资源内存不足导致低优先级的activity被杀死
这里的情况和前面的情况1数据存储和恢复是完全一致的,activity按照优先级从高到低可以分为如下三种:
(1)前台activity---正在和用户交互的activity,优先级最高
(2)可见但非前台activity---比如activity中弹出了一个对话框,导致activity可见但是位于后台无法和用户直接交互。
(3)后台activity---已经被暂停的activity,比如执行了onStop,优先级最低。

 

05、Activity异常情况下的生命周期

 

1.Intent/Bundle

可以使用 startActivity()或者startActivityForResult();

1、向目标Activity传递数据:

Intent intent=new Intent(OneActivity.this,SecondActivity.class);
//可传递多种类型的数据
intent.putExtra("name","芒果");
intent.putExtra("age",12);
startActivity(intent);                

//创建意图对象
Intent intent = new Intent(OneActivity.this,SecondActivity.class);
//用数据捆传递数据
Bundle bundle = new Bundle();
bundle.putString("data", “传递的数据”);
//把数据捆设置改意图
intent.putExtra("bun", bundle);
//激活意图
startActivity(intent);

2、在目标Activity中取出数据

Intent intent=getIntent();
//用getXxxExtra()取出对应类型的数据。取出String只需要指定key
String name=intent.getStringExtra("name");
//取出int要指定key,还要设置默认值,当intent中没有该key对应的value时,返回设置的默认值
int age=intent.getIntExtra("age",0);
//获取Bundle
Intent intent = getIntent();
Bundle bundle = intent.getBundleExtra("bun");
String str = bundle.getString("data");

2.类静态变量

//声明为静态file
static int age=0;

3.全局变量

重新声明一个类,再类中声明一个全局变量;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值