昨天小逗比面试回来,我们聊了一下,其中一个关于当前activity调用其他应用的activity后,会不会加入到当前的任务栈里的问题,印象深刻。
手头的活也调用了其他应用,以前做老式的分享也用过这里,但是具体里面的实现和归属真的没有细想过,正好在这整理一下。
首先得说,无论是哪个activity都是通过intent+startActivity来启动的,这其中startactivity只是一个执行者,具体执行什么,由intent决定。通过intent的具体意图来区分 显示调用(知道包名加activity名直接打开)和隐式调用(知道过滤器的action)。其中要注意的点是被调用的activity必须exported = true,嘻嘻其实错几次就知道了。
好了,指定的activity已经起来了,那么他就是已经被加入到栈里了,具体怎么加入,要看是通过那种启动模式启动的,对于activity有四种:standard(默认的、什么都不管直接加)、singletop(只复用栈顶,栈顶有就用没有就新建实例并压栈)、singletask(全栈找,找见了就把他上面的全清掉直到他为栈顶,没有在创建新的并压栈)、singleinstance(这个牛,直接开一个新栈放当前的activity实例,所有其他的应用引用这个activity都只是重用这个实例,相当于多个应用共享,也有一个隐式的附加,任意其他应用引用这种activity都会进入到该activit