《Android开发艺术探索》第一章----Activity的生命周期和启动模式

1.LeetCode10

递归的基本要义:要有严格递归出口,通常情况下是if(特殊情况)return;if(各种情况)return ,else return
注:阶乘的递归写法,要加溢出判断!

int jiecheng(int n)
{
    int result;
    if(n==0)
      return 1;
    if(n>0)
    {
        result=n*jiecheng(n-1);;
        if(result>0&&result<=INT_MAX)
        {
            return result;
        }         
        else{
          return 0;
       }
    }
} 

2.《Android开发艺术探索》第1章

  1. onStart()和onResume()对比
    onStart和onResume都表示Activity已经可见,但onStart时候Activity在后台,onResume时候Activity在前台
  2. onPause()必须先执行完,新Activity的onResume才会执行(为什么不是onStop执行完再执行?)
    答:onStop表示Activity退居后台,但有些新Activity执行不需要旧Activity退出前台
  3. 如果打开新的Activity使用的是透明主题,则当前Activity不会回调onStop
  4. 当Activity被系统回收后再次打开,生命周期方法的回调过程从开始一样,但不是所有过程都一样??
  5. 不能在onPause中做重量级的操作,因为必须onPause执行完成以后新的Activity才能Resume
  6. Activity被异常结束的两种情况:“资源相关的配置文件发生改变”以及“系统内存不足”
  7. 只有在Activity被异常结束的情况下,onSaveInstanceState才会执行,且在onStop之前调用,他和onPause没有既定的时序关系
  8. onRestoreInstanceState在新启动Activity的onStart之后执行(为什么不再onCreat之前执行?)
    答:因为重建原Activity,初始化工作相同,且系统通过判断onRestoreInstanceState和onCreate来判断Activity是否应该重建
  9. 系统异常退出后,如何人工恢复一些数据?(是用onCreat方法还是onRestoreInstanceState?)
    答:理论上都可以,但官方推荐onRestoreInstanceState。因为如果onRestoreInstanceState一旦被调用,代表Bundle里值不为null,不用做非空性判断。而onCreat需要判断
  10. minSdkVersion和targetSdkVersion的区别
    答:minSdkVersion在编译期间和运行期间都起作用。在编译期间:低于minSdkVersion的API不能使用,在运行期间:低于minSdkVersion的手机不能安装应用
    targetSdkVersion在运行期间作用,表示APP测试运行的Version。决定程序是否以兼容模式运行(版本低的手机将自动使用兼容包来实现一些效果),targetSdkVersion如果太低,程序运行在高版本手机上则可能出错(违背向下兼容原理),所以一般取最新版本
  11. 每个Activity都有自己的任务栈,Activity A启动B,则B就加入A的任务栈中
  12. 一个Activity启动时需要指定自己的任务栈和启动方式,如果任务栈不存在,则需要先创建任务栈,再把活动放入栈中
  13. 给Activity设定启动模式有两种方法:1.在AndroidMenifest中指定(但无法设定FLAG_ACTIVITY_CLEAR_TOP) 2.在Intent中设置标志位(优先级更高但不能设定singleInstance模式)
  14. 隐式调用Intent(只有一个Intent同时匹配action,category和data才算匹配成功)
  15. 为Intent设定data,必须调用setDataAndType方法,不能先setData再setType,根据源码,两个方法会彼此消除对方的值
  16. 对于Service,尽量使用显示调用方式启动服务
  17. 隐式启动Activity可以先判断是否有符合条件的Intent。方法有两种:1.PackageManager的resolveActivity方法 2.Intent的resolveActivity方法

问题:

  1. onStop-->onRestart 数据如何恢复??
    答:这时候上一个Activity并没有被销毁,onCreate过程依然存在,所以直接onStart重启即可
  2. singleTop和singleTak的onNewIntent方法是如何回调的??
    答:当其他Activity启动singleTop或singleTak的Activity时,不会调用Activity的onCreate方法,而会调用onNewIntent方法,此时要重新setIntent,才能用getIntent获取到
protected void onNewIntent(Intent intent) {

   super.onNewIntent(intent);

   setIntent(intent); //必须重新设置Intent才能被getIntent方法获取到

   processExtraData()

 }

系统可能会随时杀掉后台运行的Activity,如果这一切发生,那么系统就会调用onCreate方法,而不调用onNewIntent方法,一个好的解决方法就是在onCreate和onNewIntent方法中调用同一个处理数据的方法,如下所示:

public void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);

   setContentView(R.layout.main);

   processExtraData();

 }

 protected void onNewIntent(Intent intent) {

   super.onNewIntent(intent);

   setIntent(intent);//必须重新设置Intent才能被getIntent方法获取到

   processExtraData()

 }

 private void processExtraData(){

   Intent intent = getIntent();

   //使用Intent获取的数据进行相应操作

 }
  1. singleInstance中的A如果启动B,B会不会启动??
    答:会启动,这时候B会在ActivityMain的任务栈中入栈

你可能感兴趣的:(《Android开发艺术探索》第一章----Activity的生命周期和启动模式)