一:
1.startActivityForResult的请求码要大于等于0
2.activity返回result是在被finish的时候,也就是说调用setResult()方法必须在finish()之前。
那么如果在如下方法中调用setResult()也有可能不会返回成功: onPause(), onStop(), onDestroy(),
因为这些方法调用不一定是在finish之前的,当然在onCreate()就调用setResult肯定是在finish之前的。
在APP开发中,为了在页面之间传递对象(这里强调回传),我们通常使用startActivityForResult。如果ActivityA要跳转到ActivityB,但是ActivityB的启动模式为singleTop,方法调用就会存在一些“异样”。在Android4.4,ActivityA调用startActivityForResult后,ActivityB会立即执行;but在安卓5.0上,就不存在该问题。探究了一种该问题的解决方法,使用广播。这里就要注意了要在onCreate&&onDestory中进行注册和注销,否则接收不到信息哦!
3. setResult()界面 不能设置其他启动模式 ,否则可能会报错二:启动模式
Activity有四种加载模式:standard(默认), singleTop, singleTask和 singleInstance。
Task 栈
1. Standard 默认加载模式 ,创建时
不管栈中是否已经创建Activity实例,每次启动都会创建新的Acitivty实例
android:launchMode="standard"
如:现在栈的情况为:A B C D,在D这个Activity中通过Intent跳转到D,那么现在的栈情况为: A B C D D 。此时如果栈顶的D通过Intent跳转到B,则栈情况为:A B C D D B。此时如果依次按返回键,D D C B A将会依次弹出栈而显示在界面上。
2.SingleTop 栈顶单实例,创建时
a.栈中没有创建Activtiy实例,就创建一个新的Activity实例
b.如果该Activtiy实例处于栈顶,就不会创建新的Activtiy实例
c.如果处于栈中,启动就会创建新的Activtiy实例
android:launchMode="SingleTop "
例如:现在栈的情况为:A B C D。D的Launch mode设置成了singleTop,那么在D中启动Intent跳转到D,那么将不会新创建一个D的实例压入栈中,此时栈的情况依然为:A B C D。但是如果此时B的模式也是singleTop,D跳转到B,那么则会新建一个B的实例压入栈中,因为此时B不是位于栈顶,此时栈的情况就变成了:A B C D B。
3.SingleTask栈中单实例,创建时
a.栈中没有创建该Activtiy实例,就创建一个新的Activity实例
b.如果该Activtiy实例处于栈顶,启动不会创建新的Activtiy实例
c.处于栈中,销毁该Acitvity之上的其他实例,本身不会创建新的实例
android:launchMode="SingleTask"
例如:现在栈的情况为:A B C D。B的Launch mode为singleTask,此时D通过Intent跳转到B,则栈的情况变成了:A B。而C和D被弹出销毁了,也就是说位于B之上的实例都被销毁了。
情况二: