Activity各种特殊情况下的生命周期流程以及Activity重难点问题

1.ActivityA创建,然后ActivityA跳转到ActivityB,然后从ActivityB返回ActivityA过程中两个Activity的生命周期流程?
      onCreate(A)->onStart(A)->onResume(A)->onPause(A)->onCreate(B)->onStart(B)->onResume(B)->onStop(A)->onPause(B)->onRestart(A)->onStart(A)->onResume(A)->onStop(B)->onDestroy(B)
      当Activity的onStop()方法被调用后,Activity退入了后台,如果这时有其它优先级高的程序需要内存,Activity很可能被杀死。如果Activity被杀死,则从ActivityB返回ActivityA后Activity需要重新创建;如果ActivityA没有被杀死,则从ActivityB返回ActivityA遵循上面的生命周期流程。

2.ActivityA创建,然后切换成横屏的生命周期流程?横竖屏切换时怎样在onSaveInstanceState()方法中保存数据以供重新创建Activity时恢复使用?
      没有写onSaveInstanceState()方法的情况:onCreate()->onStart()->onResume()->onPause()->onStop()->onDestroy()->onCreate()->onStart()->onResume(),即横竖屏切换时会先销毁当前Activity,再重新创建一个横/竖屏。
      写了onSaveInstanceState()方法的情况:onCreate()->onStart()->onResume->onPause()->onSaveInstanceState()->onStop()->onDestroy()->onCreate()->onStart()->onResume()。
      在onSaveInstanceState()方法中保存数据:
          protected void onSaveInstanceState(Bundle outState){
            super.onSaveInstanceState(outState);
            outState.putString("name","KM"); 
          }
      在onCreate()方法中取出onSaveInstance()方法保存的数据:
          protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            if(savedInstanceState!=null){
              String s=savedInstanceState.getString("name");//得到s的值为KM
            }
          }
     
3.Activity生命周期方法调用时界面是否可见?
       onCreate():不可见
       onStart()、onResume():可见
       onPause():部分可见
       onStop():隐藏
       onDestroy():不可见
4.为什么ActivityA启动ActivityB要设计成先执行onPause()方法,再创建ActivityB,而不是设计成先创建ActivityB再执行onPause()方法?
      试想这样一个例子,ActivityA正在播放视频,这时打入一个电话,即ActivityB,如果不先执行onPause()方法就会造成,ActivityB显示的同时,还能听见ActivityA播放的视频声音。

5.为什么ActivityA启动ActivityB的生命周期要设计成onPause(A)->onCreate(B)->onStart(B)->onResume(B)->onStop(A),而不设计成onPause(A)->onStop()->onCreate(B)->onStart(B)->onResume(B)?
     因为ActivityA的onStop()方法执行之后,ActivityA将处于不可见状态,这时如果被ActivityA启动的ActivityB由于某些原因闪退掉,则ActivityA和ActivityB均不可见,呈现在用户眼前的将没有任何界面,影响用户体验。

6.ActivityA启动ActivityB时,在ActivityA的onPause()方法中做哪些操作?
      在onPause()方法中判断当前视频、音频是否正在播放,如果是则做暂停播放处理

7.Activity的onDestroy()方法有什么作用?
      释放在Activity中创建的资源,如Handler、ContentProvider或者MediaPlayer等等,处理方法为先判断资源是否不为空,若不为空则代码释放资源,若不做处理就会造成内存泄漏,影响性能;








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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值