Android开发艺术探索小记(第一章)


1.1Activity的生命周期全面分析

1.新Activity是透明主题时,旧Activity不会走onStop;

2.Activity切换时,旧Activity的onPause会先执行,然后才会启动新的Activity;

3.Activity在异常情况下被回收时,onSaveInstanceState方法会被回调,回调时机是在onStop之前,当Activity被重新创建的时 候,onRestoreInstanceState方法会被回调,时序在onStart之后;

1.2Acitivity的启动模式(launch Mode)

1.standard 标准 (系统默认,每次启动都会重新创建实例,谁启动了这个activity,这个activity就在谁的栈里)

2.single Top 单顶 (如果activity在栈顶,那么此activity不允许被重新创建,而是会回调onNewIntent方法)
3.single Task 单任务 (如果当前启动的activity在一个栈中存在,那么不会被重复创建,onNewIntent会被回调,onNewIntent的作用就是把当前activity放到栈顶中;如果不存在,系统会先寻找是否存在需要的栈,如果找不到,重新创建一个栈;找到了就把acitivity创建到该栈中(当然是在栈顶))
4.single Instance单实例(activity单独占用一个任务栈

其中:
singleTask有3种情况:
1.当前栈s1为abc,这时启动d,会直接创建s2,放入d
2.假设D所需要的栈为S1,s1中为abc,那么直接把D放入s1中
3.假设D所需要的栈为S1,当前s1位adbc,那么d会放入s1中,调用onNewIntent,由于singleTask有clearTop(清理头部)效果,于是s1中为ad,bc被清理了。

singletask中什么才是所需要的栈呢?
默认情况下acitivity所需要的的栈的名字是应用的包名
也可以通过TaskAffinity指定
其中注意:
TaskAffinity和allowTaskReparenting结合的时候,如果allowTaskReparenting=true的时候,
应用A启动了应用B的bActivity,首先是A启动的bActivity所以b bActivity是应该在A的任务栈中,这个时候allowTaskReparenting=true,这个时候点击home键后台运行,打开B应用,bActivity就被转移到了B任务栈中

1.3activity隐式启动activity

1.在跳转的activity中申明(如Aactiivty--RecylerActivity)

<activity
            android:name=".RecyclerActivity"
            android:label="@string/title_activity_recycler" >
            
             <!-- 隐式调用RecyclerViewActivity -->
        <intent-filter>
            <action android:name="com.firstline.recyclerActivity.action1"/>
            <action android:name="com.firstline.recyclerActivity.action2"/>
            <!-- default category 必须指定  可以有多个action,categoty,data,-->
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="com.firstline.recyclerActivity.category1"/>
            <category android:name="com.firstline.recyclerActivity.category2"/>
            <data android:mimeType="text/plain" android:scheme="file" android:host="abc"/>
            <data android:mimeType="image/*" android:scheme="http" android:host="www.baidu.com"/>
            <data android:mimeType="video/*"/>
            
        </intent-filter>
            
        </activity> 
 2.
Intent intent = new Intent("com.firstline.recyclerActivity.action1");
//可写可不写,但是被跳转的activity中的intent-filter必须要有  <category android:name="android.intent.category.DEFAULT"/>
intent.addCategory("com.firstline.recyclerActivity.category2");
//type必须与后面相同,scheme没有指定的情况下,默认为file:开头
 intent.setDataAndType(Uri.parse("file://abc"), "text/plain");
//type必须与后面相同,scheme没有指定的情况下,默认为file:开头
//intent.setDataAndType(Uri.parse("http://www.baidu.com"), "image/*");
startActivity(intent);


拓展:

MIME TYPE描述

多用途互联网邮件扩展MIMEMultipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息。

内容类型(Content-Type),这个头部领域用于指定消息的类型。一般以下面的形式出现。[type]/[subtype]

type有下面的形式。

  • Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;
  • Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据;
  • Application:用于传输应用程序数据或者二进制数据;
  • Message:用于包装一个E-mail消息;
  • Image:用于传输静态图片数据;
  • Audio:用于传输音频或者音声数据;
  • Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。

subtype用于指定type的详细形式。content-type/subtype配对的集合和与此相关的参数,将随着时间而增长。为了确保这些值在一个有序而且公开的状态下开发,MIME使用Internet Assigned Numbers Authority (IANA)作为中心的注册机制来管理这些值。常用的subtype值如下所示:

  • text/plain(纯文本)
  • text/html(HTML文档)
  • application/xhtml+xml(XHTML文档)
  • image/gif(GIF图像)
  • image/jpeg(JPEG图像)【PHP中为:image/pjpeg】
  • image/png(PNG图像)【PHP中为:image/x-png】
  • video/mpeg(MPEG动画)
  • application/octet-stream(任意的二进制数据)
  • application/pdf(PDF文档)
  • application/msword(Microsoft Word文件)
  • message/rfc822(RFC 822形式)
  • multipart/alternative(HTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示)
  • application/x-www-form-urlencoded(使用HTTP的POST方法提交的表单)
  • multipart/form-data(同上,但主要用于表单提交时伴随文件上传的场合)
---------------------------------------------------------------------------------------------------------------------------

Android中MimeType的用途
                Intent-Filter中的<data>有一个mimeType . 它的作用是告诉Android系统本Activity可以处理的文件的类型。如设置为 “text/plain”表示可以处理“.txt”文件。
MimeTypeMap类
                MimeTypeMap类是专门处理mimeType的类。


来源: <http://blog.csdn.net/chenqian_lj/article/details/24179461>
 


你可能感兴趣的:(生命周期,intent,Activity启动模式,Android开发艺术探索,任玉刚)