重新认识Activity

转载 2016年08月29日 16:13:55

1.activity的启动方式
分为直接起动和匿名启动。

  • 直接启动
    一般用于知道要启动activity的名字
    Intent intent = new Intent(MainActivity.this,SecondActivity.class);
    startActivity(intent);

    或者
 Intent intent = new Intent();
 ComponentName componentName = new ComponentName(MainActivity.this, SecondActivity.class);
 intent.setComponent(componentName);
 startActivity(intent);
  • 匿名方式
    一般不知道要启动的activity的具体名字,比如想要启动微信某个界面的activity,就得用action去启动具体的activity。或者启动系统的activity。
  Intent intent = new Intent();
   intent.setAction("www.baidu.com");
   startActivity(intent);

之后在mainfest.xml文件里进行注册,如下图:
这里写图片描述
在标签内的action 标签内加入想要打开的内容
标签属性用于指定当前动作(action)的指定环境

- 一些启动系统activity的方法

 Intent intent = new Intent();
 intent.setAction(Intent.ACTION_VIEW);   //启动默认浏览器
 Uri url =Uri.parse("www.bai.com") ;
 intent.setData(url);
 startActivity(intent);
intent.setAction(Intent.ACTION_GET_CONTENT);//启动系统相册
intent.setType("image/*");
intent.setAction(Intent.ACTION_SEND); //发送短信
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT," hello world");
 intent.setAction(Intent.ACTION_VIEW); //启动电话界面
  Uri url =Uri.parse("tel:1378191") ;
  intent.setData(url);

2.Activity 之间的数据交换
activity之间传递的数据类型主要有三种:基础数据、javabean类型、bitmap 类型

  • 基础数据类型
    在传递基础数据的时候最常用的是intent,intent可以传递8种基础数据,并且可以传递bundle ,bundle也是一种键值对形式的存储

  • javabean类型
    如果传递的信息量过大,上一种方法无法满足的时候,可以将传递的信息封装成类,进行传递,或者本身就要传递某个类的实例。首先需要将所传递的对象所属的类实现Serializable接口. 之后在传递的过程中调用bundle的putserializable()方法把所要传递的对象放进去,再将bundle实例对象放进intent实例对象中。例:

Intent intent = new Intent(MainActivity.this,SecondActivity.class);
Person person = new Person(24,"小芳","女"); //person类已实现Serializable接口
Bundle bundle = new Bundle();
bundle.putSerializable("person",person);
intent.putExtras(bundle);

取数据时,调用intent的getSerializableExtra()方法即可

  • bitmap类型
 Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);
 bundle.putParcelable("bitmap",bitmap);
 intent.putExtras(bundle);

注意:在传送数据的时候,bundle只能传递大概小于0.5M容量的数据,传递图片的时候尽量不要将原图传递过去,否怎会抛出TransanctionToolargeException .

3.Activity 的 Task 和启动模式
Task是一个存在于Framework层的概念
Task,简单的说,就是一组以栈的模式聚集在一起的Activity组件集合。它们有潜在的前后驱关联,新加入的Activity组件,位于栈顶,并仅有在栈顶的Activity,才会有机会与用户进行交互。而当栈顶的 Activity完成使命退出的时候,Task会将其退栈,并让下一个将跑到栈顶的Activity来于用户面对面,直至栈中再无更多 Activity,Task结束.

LaunchMoude(启动模式):

  • standrd(默认启动方式)

    标准启动模式,也是activity的默认启动模式。在这种模式下启动的activity可以被多次实例化,即在同 一个任务中可以存在多个activity的实例,每个实例都会处理一个Intent对象。如果Activity A的启动模式为standard,并且A已经启动,在A中再次启动Activity A,即调用startActivity(new Intent(this,A.class)),会在A的上面再次启动一个A的实例,即当前的桟中的状态为A–>A。

  • singleTop

    如果一个以singleTop模式启动的activity的实例已经存在于任务桟的桟顶,那么再启动这个Activity时,不会创建新的实例,而是重用位于栈顶的那个实例,并且会调用该实例的onNewIntent()方法将Intent对象传递到这个实例中。举例来说,如果A的启动模式为singleTop,并且A的一个实例已经存在于栈顶中,那么再调用startAct ivity(new Intent(this,A.class))启动A时,不会再次创建A的实例,而是重用原来的实例,并且调用原来实例的onNewIntent()方法。这是任务桟中还是这有一个A的实例。
    如果以singleTop模式启动的activity的一个实例已经存在与任务桟中,但是不在桟顶,那么它的行为和standard模式相同,也会创建多个实例。

  • singleTask

    谷歌的官方文档上称,如果一个activity的启动模式为singleTask,那么系统总会在一个新任务的最底部(root)启动这个activity,并且被这个activity启动的其他activity会和该activity同时存在于这个新任务中。如果系统中已经存在这样的一个activity则会重用这个实例,并且调用他的onNewIntent()方法。即,这样的一个activity在系统中只会存在一个实例。

    其实官方文档中的这种说法并不准确,启动模式为singleTask的activity并不会总是开启一个新的任务。详情请参考 解开Android应用程序组件Activity的”singleTask”之谜,在本文后面也会通过示例来进行验证。

  • singleInstance
    总是在新的任务中开启,并且这个新的任务中有且只有这一个实例,也就是说被该实例启动的其他activity会自动运行于另一个任务中。当再次启动该activity的实例时,会重用已存在的任务和实例。并且会调用这个实例的onNewIntent()方法,将Intent实例传递到该实例中。和singleTask相同,同一时刻在系统中只会存在一个这样的Activity实例。

未完待续。。。。。

相关文章推荐

Android从零开始之重新认识Activity--生命周期

在编程中有一个很重要的概念,就是生命周期。其实世间万物都遵循这个定理。当然在android中,Activity也有其生命周期,了解其生命周期,在之后的Android程序开发中才能如鱼得水。官方给出了一...

Android四大组件之Activity----重新认识Android(4)

Android四大组件之Activity----重新认识Android(4)

Android从零开始之重新认识Activity--基础知识

一、Activity到底是个什么东西?Activity作为Android系统中四大组件之一,Activity担负着家庭中男人一样的角色--极其重要。所以有必要对其进行深度学习。首先我们映入脑袋的第一个...

带你重新认识:Android Splash页秒开 Activity白屏 Activity黑屏

严振杰带你重新认识:Android Splash页秒开,如何解决Activity白屏,如何解决Activity黑屏。本篇博客要剖析和解决的两个问题: 1. APP启动时白屏/黑屏、Activity打开...

Android程序的结构---重新认识Android(1)

Android程序的结构---重新认识Android(1)

重新认识NTFS文件系统

  • 2014-03-21 01:00
  • 38KB
  • 下载

重新认识汇编语言.caj

  • 2012-12-24 10:59
  • 25KB
  • 下载

揭开Scrum神秘面纱重新认识Agile——记参加ShineScrum的CSM培训有感

第一次接触敏捷还是在2008年之后的5年都在使用Scrum,其间经历过两个项目,两个项目都使用了scrum,我一直担任的都是Scrum Master的角色。说实话这两个项目给我带来的Scrum体验并不...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)