Activity

Activity的常用方法

Activity启动模式

方法执行顺序调用说明
standard标准模式(默认)
singleTop栈顶复用模式
singleTask栈内复用模式
singleInstance单实例模式 - 加强的singleTask模式

standard : 在启动了这个Activity栈的栈顶重新创建一个新的实例
singleTop:
- 判断需要启动的Activity是否为任务栈栈顶 ,如果是,则不会重新创建,如果不是,则会重新创建
- 不重新创建时候,该Activity的 onNewIntent(Intent intent) 方法会被回调,通过该方法的参数,可以取出当前请求的信息;
- 系统可能会杀死该Activity,杀死之后,启动情况与第一次启动相同,所以有必要在onCreate与onNewIntent方法中调用同一个处理数据的方法
- 运用场景:常运用于通知栏弹出Notification,点击Notification跳转到指定的Activity,设置singleTop模式

生命周期相关方法

方法执行顺序调用主用途是否可见(Visibility)用户交互(Click)
onCreate()创建初始化NOON
onStart()开始YESON
onRestart()重新开始YESON
onResume()获得焦点且可见YESYES
onPause()失去焦点且可见YESNO
onStop()不可见NONO
onDistory()销毁关闭资源NONO

1.1 Activity的生命周期全面解析

本节将Activity的生命周期分为两部分内容,第一部分是典型情况下的生命周期,另一部分是异常情况下的生命周期。
典型情况:指在有用户参与的情况下,Activity所经过的生命周期的改变;
异常情况:指Activity被系统回收或者由于当前设备的Configuration发生改变从而导致Activity被销毁重建。

1.1.1 典型情况下的生命周期分析

onCreate>onRestart>onStart>onResum>onPause>onStop>onDistroy

正常情况下,Activity的常用生命周期就只有上面7个,具体情况如下表所示:

编号header3
1第一次启动onCreate>onStart>onResume
2打开新的ActivityonPause>onStop 如果新打开的Activity为透明主题,当前Avctivity不会回调Stop,只回调onPause方法。
3切换到桌面onPause>onStop
4再次回到ActivityonRestart>onStart>onResume
5用户按back键回退时onPause>onStop>onDestroy
6Activity被系统回收再次打开生命周期方法与回调过程同1一样,注意只是生命周期方法一样,不代表所有过程都一样,后面详细解释。

Activity有如此多方法的原因,方法配对:

  1. Activity的创建与销毁,从创建销毁的角度考虑。 onCreate>onDstroy
  2. Activity是否可见,随着用户的操作或者设备屏幕的点亮和熄灭,这两个方法可能被调用多次。从Activity是否可见的角度考虑 onStart>Stop
  3. Activity是否在前台,从Activity是否位于前台考虑 onResume>onPause
    除了这种区别,在实际使用中没有其他明显区别。

一个Activity启动另一个Activity的方法顺序:

OldActivity.onCreate() > OldActivity.onRetart() > 
OldActivity.onStart() > OldActivity.onResum() > 
NewActivity.onCreate().OldActivity.onStop()

关闭Activity的方法

方法调用
activity.onFinish()依次调用Activity生命周期相关方法正常关闭
android.os.Process.killProcess(android.os.Process.myPid())绕过Activityd的生命周期强制关闭
isFinishing()在activity被销毁前会调用该方法

1. activity在finish时候,还有收到广播,结果导致bug在广播接收器中先判断一下比较保险。或者在onDestroy里面注销广播
2. acivity在finish时候,这时候handler.sendMessage,这时候也会导致bug
这时候最好在finish函数里面removeAllCallbackAndMessage(this)

private BroadcastReceiver mIntentReceiver = new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            Log.d(TAG, intent.toString());    
            final String action = intent.getAction();

            if(isFinishing())
            {
                  。。。。。。。              
                return;
            }
}

一个Activity打开另一个Activity的方法

方法调用
startActivity(Intent)打开一个Activity
startActivity(Intent,Bundle)打开一个Activity并通过Bundle传递参数
startActivities(Intent[])打开多个Activity
startActivities(Intent[],Bundle)打开多个Activity并通过Bundle传递参数
startActivityForResult(Intent,int requestCode)打开一个Activity并获取返回结果,
startActivityForResult(Intent,int,Bundle)返回结果通过onActivityResult()方法获取。

- Intent:组件之间调用需要使用Intent,可以调用setExtra()方法传递数据
- Intent[]:Intent数组,根据在数组中的顺序依次调用
- int requestCode:与onActivityResult(int requestCode, int resultCode,
Intent data)中的requestCode对应
- Bundle 可以通过Bundle传递数据

一个Activity向另一Activity返回结果

步骤方法调用
1setResult(int resultCode)返回结果码
1setResult(int resultCode,Intent)返回结果码和通过Intent传递数据
2finish()关闭当前Activity

一个Activity打开另一个Activity,然后获取返回结果

方法调用
onActivityResult(int requestCode, int resultCode, Intent data)

通过startActivityForResult()方法启动另外一个Activity才会调用onActivityResult(),startActivity()方法和startActivities()不会调用此方法。
- int requestCode:通过 startActivityForResult(Intent,int requestCode)设置的请求码
- int resultCode:通过setResult(int resultCode)设置的返回码
- Intent

一个Activity获取另一个Activity返回结果

步骤方法调用
1activityA.startActivityForResult(Intent,int requestCode)Activity调用
2activityB.setResult(int resultCode)返回结果码
2activityB.setResult(int resultCode,Intent)返回结果码和通过Intent传递数据
3activityB.finish()关闭当前Activity
4activityA.onActivityResult(int requestCode, int resultCode, Intent)Intent是setResult()方法返回的Intent

- int requestCode 请求码
- int resultCode
- Intent 通过intent传递数据

保存、恢复当前Activity状态

步骤方法调用
1activityA.onSaveInstanceState(Bundle,PersistableBundle)储存需要保存的变量
1activityA.onSaveInstanceState(Bundle)储存需要保存的变量
2activityA.onRestoreInstanceState(Bundle,PersistableBundle)恢复保存的变量
2activityA.onRestoreInstanceState(Bundle)恢复保存的变量

- 情况1.资源相关的系统配置发生改变
- 情况2:资源内存不足导致低优先级Activity被杀死

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值