• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android进阶--Acticivity的启动模式,acticvity启动模式

Android进阶--Acticivity的启动模式,acticvity启动模式

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android 启动模式,android四种启动模式,android 设置启动模式,android 四大启动模式,android 观察者模式等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android进阶--Acticivity的启动模式,acticvity启动模式


一、引言   

    我们在多次启动同一个Activity时,系统默认会重复创建多个实例,这样看上去便十分的愚蠢,所以android在设计时提供了启动模式来修改系统的默认行为。目前有四种启动模式:standard、singleTop、singleTask和singleInstance。

二、如何设置启动模式

    1.我们可以通过AndroidMenifest为Activity指定启动模式

    <activity android:name=".SecondActivity"
android:configChanges="screenLayout"
android:launchMode="singleTask"
>
</activity>

    2.我们可以通过Intent标志位来为Activity指定启动模式    Intent intent = new Intent(); 
           intent.setClass(MainActivity.this,SecondActivity.class);
           intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//android标志位
           startActivity(intent);
三、启动模式介绍

     在学习时看到一篇不错的博客,图画的很清晰明白,在这里就不重复了。附上链接              http://www.cnblogs.com/meizixiong/archive/2013/07/03/3170591.html

     1.stardand(系统默认):

        在这里我们先将任务栈,直接看成一个栈,来简单了解,不做具体分析。

        当我们使用stardand时,每启动一次activity,他就会在启动他的activity所在的栈中创建实例。

        当我们用ApplicationContext去启动他时系统会报错。这句话我看书的时候不是特别明白,什么是非activity的context,所以 去查了下资料,service、application和activity都是context的子类,看到这里就明白了,context不只是单指activity。所以接下来的话便好理解了,因为非activity的context没有任务栈,所以一但有他们去启动一个stardand模式的activity,便会因为没有任务栈,使得程序报错。

       解决方法,我们可以想到既然他缺少一个存放他的任务栈,那么我们便为他创建一个。指定FLAG_ACTIVITY_NEW_TASK标记位。但如此处理他的启动方式便成为了singleTask.

     2.singleTop(栈顶复用):

         当我们所要启动的activity已经位于栈顶的时候,那么activity不会被重建,同时他的onNewIntent方法会被回调,这里又有疑问了,什么是onNewIntent方法。查资料后发现,在singleTop模式中,系统并不会调用我们通常处理数据的onCreat()方法,而是调用另一个方法onNewIntent(),所以说我们为什么要调用onNewIntent()而不时onCreat()方法呢?找了好多博客,发现这个

链接:http://blog.sina.com.cn/s/blog_74cb7ee101017njt.html 我看了半天,应该是调用onCreat()方法时便会创建一个activity的实例吧(可能我的理解有问题,若是您发现的话请指出,谢谢)。

       附一个书上的例子

              D(singleTop)    ABCD---启动D--->ABCD

              D(stardand)     ABCD---启动D--->ABCDD

     3.singleTask(栈内复用模式):

          单实例模式,只要activity在一个栈中存在,那么多次启动他均不会创建实例,回调onNewIntent方法。

         举例:当启动A时,系统会先找是否存在A所需要的栈(这里的所需要涉及到了一个参数:TaskAffinity,这个参数指定了activity所需要的任务栈,默认为应用的包名),若不存在则新建一个栈,创建A的实例,并放入栈中。若存在,则看其中是否存在A的实例,不存在则创建并压入栈中,若存在,则调到栈顶,回调onNewIntent()方法。

       D(singleTask) 需要S2 

       1.S1 ABC--> S1 ABC --->S1 ABC

                           S2              S2 D

        2. S1 ABC--->S1 ABCD

        3. S1 ADBC-->S1  ADB--->S1  AD

     4.singleInstance(单实例模式)

       加强型singleTask模式,具有此种模式的activity启动时,系统会单独建立一个任务栈来存放他。如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例

       D(singleInstance)

       1.S1 ABC--启动D->S1 ABC

                                   S2 D                

       除非S2被销毁,那么启动D时,一直不需要重新创建。

     

      到目前为止,启动模式已经全部介绍完了,以上是我的全部学习体会,如果有什么不对的,或是写的不好的地方,请指正,谢谢。PS.(第一次写博,有点虚)

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android进阶--Acticivity的启动模式,acticvity启动模式

相关文章

  • 2017-05-26安卓四大组件之服务,安卓四大组件
  • 2017-05-26UI篇(初识君面),ui初识君面
  • 2017-05-26Android学习笔记-ImageView(图像视图),android-imageview
  • 2017-05-26udp connect 总结
  • 2017-05-26Android第一天--&gt;布局,android第一天--
  • 2017-05-224.2.3 Service精通
  • 2017-05-26策略模式,java策略模式
  • 2017-05-26Android5.0开发范例大全 读书笔记(三),android5.0范例
  • 2017-05-26Android中的属性动画(Property Animation)——Android开发艺术探索笔记
  • 2017-05-26首页2--动态自定义圆形进度条,首页2--圆形进度条

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android开发10:传感器器及地图相关应用,android传感器
    • 解决 在Android开发上使用KSOAP2上传大图片到服务器经常报错的问题,
    • Android学习笔记(32):通知推送Notification浅析
    • 一个规范的自定义View——Android开发艺术探索笔记
    • 两个Service之间相互监视的实现,两个service监视
    • android权限大全
    • 一次奇怪的MySQL复制故障
    • Android Studio创建/打开项目时一直处于Building“project name”Gradle project info的解决办法,androidgradle
    • 安卓高级组件-----进度条,安卓-----进度条
    • Android工程师入门(一)——这周入大门,挤时间,轻喷,android工程师

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有