在遥远的火影村,诞生了一个黄色头发的小宝宝,他的母亲给他取名为漩涡鸣人。
android:launchMode="singleTop" 将启动模式定义为singleTop模式
然后这时候鸣人就可以搓丸子了
在这种状态下,丸子处于栈顶,当我们继续搓来保持这个丸子的时候,就是我们在创建一个同样的活动来让丸子仍然处于栈顶。让我们来写一下代码:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button Button=findViewById(R.id.button3);
Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,MainActivity.class);
startActivity(intent);
}
});
Log.d(TAG,"正在搓丸子");
}
}
运行一下:会发现不管我们点击多少次按钮,在Logcat只显示了一次:
2020-03-20 01:33:10.848 23627-23627/com.example.naruto D/MainActivity: 正在搓丸子
这是因为此时丸子一直是处于栈顶的,当我们点击按钮来搓丸子的时候,由于当前栈顶有一个丸子,所以我们仍然搓这个丸子。于是乎这个栈顶就被复用了。这个活动只有一个实例,我们点击一次back就可以返回。
如果我们把这个丸子扔出去,在搓一个其他丸子,那么当我们还想搓这个丸子的时候,由于现在手里是其他丸子,所以我们还得把其他的丸子扔了在去搓丸子才可以。
当活动处于singleTop模式,在启动活动时如果发现返回栈的栈顶已经是该活动,则可以认为直接使用它,不会再创建一个新的活动。但是当这个活动不处于栈顶,那么还需要在重新创建一个新的活动压入栈并置于栈顶位置。
原理图如下:
应用场景:singleTop适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的,从外界可能多次跳转到一个界面。
摘自 chun_soft
鸣人在小时候不知道的是,当初自己的父亲和母亲牺牲自己,将九尾放入他的体内,让他成为了九尾的人柱力。这也就是为什么村民们如此惧怕他。
九尾充满着怨恨,企图控制鸣人。
但是鸣人用自己的执著和乐观感化了九尾,自此之后,鸣人和九尾并肩作战。在后面甚至可以召唤出体外进行作战。
这是为什么呢,其实是因为鸣人懂得了singeleInstance模式。
这种模式的特点是:
该模式的活动会启动一个新的返回栈来管理这个活动(如果singleTask模式指定了不同的taskAffinity,也会启动一个新的返回栈)。
这种模式下的鸣人到底有啥厉害的呢?请仔细看这个例子。
在没有这种模式下的鸣人,只能依靠螺旋丸等普通的技能,还远远不到开挂的地步。
鸣人这个活动启动螺旋丸或者影分身是这样的 鸣人->螺旋丸 。
但是!
此时此刻,鸣人拥有了九尾。
这种情况下
鸣人召唤了九尾
鸣人->九尾
九尾作为一个独立的个体,拥有强大的战斗力 甚至可以放尾兽玉这个BUG技能!
但是尾兽玉始终是属于九尾的力量。
于是乎 九尾被放在了一个新的栈中 这个栈就叫九尾不能说的秘密
在这个栈中 九尾->尾兽玉
所以当处于singeleInstance模式下的鸣人,是这样放技能的。
鸣人->九尾->尾兽玉->螺旋丸
在这种情况下 鸣人与螺旋丸在一个栈中,由于鸣人召唤了九尾,九尾和尾兽玉则在一个新的栈中。
那么鸣人这时候要如何停止这个模式呢?
首先点一次back,鸣人收回了螺旋丸
由 4->1 因为此时九尾和尾兽玉并不在这个栈中。
然后在点一次back,这时候鸣人在栈顶,就可以准备回收九尾了,于是乎九尾的栈就显示出来了,栈顶还是尾兽玉呢
由1->3(3是2和3这个栈的栈顶)
在点一次back,尾兽回收了尾兽玉 由 3->2
在点一次back,鸣人回收了尾兽,新生成的栈消失了。2->1
再点一次back,鸣人结束了战斗。 np!!!
原理图如下:
应用场景:singleInstance适合需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离。
希望大家可以通过这几个小例子理解安卓活动的启动模式之间的区别,很少写博客,写的不是很好,希望见谅。
最后附上名场面:
一袋米要抗几楼
一袋米要抗二楼
一袋米要我给多嘞
一袋米要有洗尼
口口有泥
谁给你的一袋米楼
辛辣填sei!!!!
作者:Py_csdn_