美文网首页
Activity篇

Activity篇

作者: SnailWalker | 来源:发表于2021-03-25 17:02 被阅读0次

笔记地址:https://app.yinxiang.com/fx/b30ed8bc-0896-4c1b-b1cf-da4d08c75a02

前言:
Activity是一种展示型组件,用于向用户直接地展示一个界面,并且可以接受用户的输入信息从而进行交互;

1. 生命周期

Google官方解释: https://developer.android.google.cn/guide/components/activities/activity-lifecycle?hl=zh_cn

2. 启动模式{

launchMode{
     1. standard (标准模式) [默认]
           >1. 多实例实现
     2. singleTop
        >1. 栈顶复用 {@link onNewIntent}
     3. singleTask
        >1. 栈内复用 
        >2. 默认具有clearTop的效果
     4. singleInstance
        >1. 单实例子模式;
        >2. 不论是指指定taskAffinity,都会为它创建一个新的任务栈;
 },
Flags{
     1. FLAG_ACTIVITY_NEW_TASK
     2. FLAG_ACTIVITY_SINGLE_TOP
     3. FLAG_ACTIVITY_CLEAR_TOP
     4. FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
 }

}

3. IntentFilter匹配规则 (隐式调用)

1Activity->nIntentFilter{
naction {
1. Intent中的action必须存在 & 过滤规则中的其中一个action相同;
2. 区分大小写;
3. 唯一性: Intent #setAction;
},
n
category {
1. Intent中没有category || Intent中的categorys必须是过滤规则中的;
2. 系统调用startActivity / startActivityForResult时,会默认为intent添加categoryDefault( android.intent.category.DEFAULT) 这个所以过滤规则中必须制定这个categoryDefault
3. 可以申明多个: Intent #addCategory;
},
ndata{
1. 匹配规则类似action;
2. 需要搭配action一起使用;
3. Intent #setDataAndType, setData, setType;
}->{
1
mimeType{
1. 媒体类型
2.举例: image/jpeg etc
},
1*URI{
1. 结构: <scheme>://<host>:<port> /[<path>|<pathPrefix>|<pathPattern>] ;
2. 类似: http://www.xxx.com:80/serach/info;
3. 常见使用键下面补充部分
}
}
}

案例分析:
[1] ActivityA使用Intent.FLAG_ACTIVITY_NEW_TASK启动ActivityB (设置taskAffility=":other"),并在B中使用Intent.FLAG_ACTIVITY_NEW_TASK启动ActivityB,会发现第二步启动基本没有任何效果,没有走onNewIntent或者onCreate回调;

4. 源码解析

Activity启动流程 9.0 (整体流程分析): https://blog.csdn.net/weixin_43766753/article/details/107746968
Activity启动流程 10.0: http://www.zyiz.net/tech/detail-124642.html

5. 补充(待定)

  1. Android为什么要有启动模式呢?
    1.方便Activity管理;
    1. 提高资源利用;
  2. 启动模式默认{
    launchMode="standard"
    taskAffinity="$app_packageName"
    };
  3. 使用ApplicationContext启动Activity(无论launchMode为任何值),需要添加Intent.FLAG_ACTIVITY_NEW_TASK标记位,这个启动类似SingleTask模式启动;
  4. taskAffinity属性不能单独使用,需要配合Intent.FLAG_ACTIVITY_NEW_TASK或者allowTaskReparenting或者singleTask模式etc;
  5. setDataAndType启动->{
    Intent().apply{
    启动浏览器浏览某个网页{
    action=Intent.ACTION_VIEW
    setData(Uri.parse("http://www.baidu.com")
    },
    启动拨号{
    action=Intent.ACTION_CALL
    setData(Uri.parse("tel:132****1222"))
    },
    打开文件{
    ...
    }
    }
    }
    6.启动Activity判断 PackageManager#resolveActivity
  6. Activity属性{
    label :
    1. app名: 入口Activity的lable>application的lable;
    2. 其它Activitiy的label属性可以用于通过隐式启动的时候,选择启动应用的显示
    }

参考:
<<Android开发艺术探索>>
一只修仙的猿

相关文章

网友评论

      本文标题:Activity篇

      本文链接:https://www.haomeiwen.com/subject/yzlrhltx.html