Android 关于SingleInstance Activity的注意事项

关于 SingleInstance Activity的注意事项

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

blog.csdn.net/su201451040…

2 两个坑:blog.csdn.net/Mr_JingFu/a…

  • 启动顺序为: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:

www.cnblogs.com/dreamy89032…

如果不是应用退出,最好不要finishSingleInstanceActivity,而是采用隐藏的方式:

@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回调失败】blog.csdn.net/ben0612/art…

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

5 设置了"singleTask"启动模式的Activity的特点

blog.csdn.net/Luoshengyan…

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

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

6.再添新坑

之所以用 onNewIntent(Intent intent) 而不是在 onResume() 中通过调用 getIntent()获取最新Bundle中的信息,是因为 getIntent 获取的是第一次startActivity时传入的Intent对象;

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

本文作者:风之旅人

本文链接:https://www.cnblogs.com/jooy/p/17302051.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   javakam  阅读(0)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起