美文网首页
Activity--启动模式

Activity--启动模式

作者: d9e7e8498548 | 来源:发表于2020-07-05 22:15 被阅读0次

1.Activity

启动模式

  • 四种启动模式

    Activity的启动模式有四种:standard、singleTop、singleTask和singleInstance。

    singleTop:栈顶复用模式。如果要启动的Activity已经处于栈的顶部,那么此时系统不会创建新的实例,而是直接打开此页面,同时它的onNewIntent()方法会被执行onCreate(),onStart()方法不会被调用。

    singleTask:栈内复用模式。如果栈中存在这个Activity的实例就会复用这个Activity,不管它是否位于栈顶,复用时,会将它上面的Activity全部出栈,因为singleTask本身自带clearTop这种功能。并且会回调该实例的onNewIntent()方法。

  • 使用场景

    • standard:正常的去打开一个新的页面
    • singleTop:消息推送界面。如果当前停留在消息详情界面A,突然来推送消息了,点击推送消息,又创建了一个详情界面A,按返回键back,还是停留在这个详情界面A,造成视觉差异
    • singleTask:PP的首页,因为一般为一个APP的第一个页面,且长时间保留在栈中。
    • singleInstance:

    (1)一般用于加载较慢的,比较耗性能且不需要每次都重新创建的Activity。

    (2)不同程序共享activity实例。

    (3)电话拨号盘页面,通过自己的应用或者其他应用打开拨打电话页面 ,只要系统的栈中存在该实例,那么就会直接调用。

在使用APP过程中,不可避免页面之间的跳转,那么就会涉及到启动模式。其实在对界面进行跳转时,Android系统既能在同一个任务中对Activity进行调度,也能以Task(任务栈)为单位进行整体调度。在启动模式为standard或singleTop时,一般是在同一个任务中对Activity进行调度,而在启动模式为singleTask或singleInstance是,一般会对Task进行整体调度。
  • 配置方式

    Manifest中配置

<activity
    android:name=".XxxActivity"
    android:launchMode="standard">
</activity>

singleTask不设置taskAffinity属性,也就是默在同一个任务栈中.

设置taskAffinity属性,singleTask所在的Activity与启动它的Activity处于不同的任务栈中。

<activity
     android:name=".SingleTaskActivity"
     android:launchMode="singleTask">
</activity>
android:launchMode="singleTop"
android:launchMode="singleInstance"

对于标准模式,android:launchMode=”standard”可以不写,因为默认就是standard模式。

  • 移动编码规范

1.预防组件最小化组件暴露

针对不需要进行跨应用调用的组件,应在配置文件(AndroidManifest.xml)中显示配置android:exported="false"属性。

组件配置android:exported="false"属性,表明它为私有组件,只可在同一个应用程序组件间或带有相同用户ID的应用程序间才能启动或绑定该服务。在非必要情况下,如果该属性设置为“true”,则该组件可以被任意应用执行启动操作,造成组件恶意调用等风险。

2.公开的组件安全

因特殊需要而公开的Activity、Service、Broadcast Receiver、Content Provider组件建议添加自定义permission权限进行访问控制。

1)AndroidManifest.xml中的定义/注册权限的写法为:
<permission
      android:name="com.ijiami.permission.testPermission"
      android:label="@string/app_name"
      android:protectionLevel="normal" />
2)AndroidManifest.xml中Activity组件使用已注册的自定义权限写法为:
<activity
      android:name="com.example.bkdemo2.LoginActivity"
      android:exported="true"
      android:label="@string/app_name"
      android:permission="com.ijiami.permission.testPermission" >
</activity>
3)外部应用需要使用自定义权限的写法(AndroidManifest.xml配置)为:
<uses-permission android:name="com.ijiami.permission.testPermission" />

3.显示调用intent

  • 参考文档

Android中Activity的启动模式(LaunchMode)和使用场景

【安全开发】Android安全编码规范

[android开发篇]自定义权限

相关文章

网友评论

      本文标题:Activity--启动模式

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