java single instance_Activity SingleInstance启动模式

关于SingleInstance Activity的注意事项:

1.当Activity被多次通过Intent方式进入后,不会重复onCreate而是执行onNewIntent方法;

启动顺序为:ActivityA->ActivityB(SingleInstance )->ActivityC ,点击Back退出顺序:C-》A-》B !!!

启动顺序为:ActivityA->ActivityB(SingleInstance ),点击HOME键再切回应用,展示A而不是B。

解决方式是一样的:

在ActivityB定义一个全局变量,public static boolean returnActivityB;在onCreate方法将returnActivityB=true;

然后在ActivityA界面onStart方法里判断returnActivityB是否为true,是的话就跳转到ActivityB,同时将returnActivityB=false;这样就能解决跳转的问题了。

3.如何合理的使用Activity:

如果不是应用退出,不要finish掉Instance,采用隐藏的方式:

@Override

public boolean onKeyDown(int keycode, KeyEvent event) {

L.e("Key_Stuta = " + event.getAction());

if (keycode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

// 右键处理

moveTaskToBack(true);

}

return true;

}

-----------------------------------》

4.再填新坑。。。

问题 【singleInstance和singleTask导致startActivityForResult回调失败】https://blog.csdn.net/ben0612/article/details/43083533

解析:startActivityForResult启动singleTask的Activity,则onActivitResult()立即回调且resultCode为RESULT_CANCEL  https://blog.csdn.net/sodino/article/details/22101881

1. 设置了"singleTask"启动模式的Activity,它在启动的时候,会先在系统中查找属性值affinity等于它的属性值taskAffinity的任务存在;如果存在这样的任务,它就会在这个任务中启动,否则就会在新任务中启动。因此,如果我们想要设置了"singleTask"启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。

2. 如果设置了"singleTask"启动模式的Activity不是在新的任务中启动时,它会在已有的任务中查看是否已经存在相应的Activity实例,如果存在,就会把位于这个Activity实例上面的Activity全部结束掉,即最终这个Activity实例会位于任务的堆栈顶端中。

-----------------》

6.再添新坑

之所以用 onNewIntent(Intentintent) 而不是在 onResume() 中通过调用 getIntent()获取最新Bundle中的信息,是因为 getIntent获取的是第一次启动时传入的

一些旧的参数信息,最新的跳转信息如intent.putExtra("setting","1"); 需要在onNewIntent传入的intent参数中取出。。。谢特

getIntent();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值