【第22期】观点:IT 行业加班,到底有没有价值?

重新认识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 Splash页秒开 Activity白屏 Activity黑屏

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

重新认识View(三)

重新认识View(三)  View事件分发:传递MotionEvent,还是和前端相似的机制,是否消费了事件,主要有是由三个过程完成,分发,拦截,调用。简单的理解为:点击后最先分发给Activity-...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

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

带你重新认识:Android Splash页秒开 Activity白屏 Activity黑屏 版权声明:转载必须注明本文转自严振杰的博客: http://blog.csdn.net/yanz...

重新认识Dagger2

前言 学习Dagger2有些时间了,现在来重新认识一下Dagger2是什么,相信Dagger2这个大名早已响遍android界了,之前听说的时候开始懵逼这是个啥,一开始去学习的时候也是懵逼,入门还是挺...

Java8系列之重新认识HashMap

简介 Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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