standard是活动的默认模式,在不进行显示指定的情况下,所有创建的活动回自动使用该模式。这个模式就是,当你启动一个活动的时候,该活动就会在返回栈中入栈,并且处于栈顶。当用户使用返回时,系统会自动显示栈顶的活动。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(“this is first activity”,this.toString());
Button button1=(Button)findViewById(R.id.first);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,MainActivity.class);
startActivity(intent);
}
});
}
运行截图:
由运行截图可以看出,点击一次按钮就会创建新的MainActivity。图中建立了两个MainActivity,所以当你想要返回,必须点三次返回键才能退出。这听上去非常麻烦,这个就是standard模式的一个特点。
运行过程:
standard模式每次启动都会创建该活动的一个新的实例
singleTop
有时候我们希望返回的时候已经处于栈顶活动不需要创建新的实例。这个时候就可以考虑singeleTop。在启动活动的时候如果发现返回栈顶已经是该活动,则直接使用。我们代码试验一下。
在AndroidMainfest.xml中先修改活动的启动该模式:
android:name=“.MainActivity”
android:launchMode=“singleTop”>
SecondAcitivity代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(“This is SecondActivity.”,this.toString());
setContentView(R.layout.activity_second);
Button button=(Button)findViewById(R.id.secondActivity);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(SecondActivity.this,MainActivity.class);
startActivity(intent);
}
});
}
}
MainActivity代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(“this is first activity”,this.toString());
Button button1=(Button)findViewById(R.id.first);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(“first activity restart”,this.toString());
}
运行截图:
运行过程:
可以看出,当跳转到secondActivity后再点击按钮又是MainActivity,但是此时的MainActivity还是新的实例。
但是如果是已经在栈顶就不会是新实例。singleTop可以解决重复创建栈顶活动,但是没办法解决创建多个活动实例。
singleTask
当活动的启动模式指定为singleTask,每次启动该活动,系统首先会在栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的实例。
修改启动模式:
android:name=“.MainActivity”
android:launchMode=“singleTask”>
MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(“this is first activity”,this.toString());
Button button1=(Button)findViewById(R.id.first);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(“first activity restart”,this.toString());
}
SecondActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(“This is SecondActivity.”,this.toString());
setContentView(R.layout.activity_second);
Button button=(Button)findViewById(R.id.secondActivity);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(SecondActivity.this,MainActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(“SecondActivity.destroy”,this.toString());
}
运行截图:
由运行截图可以看出,当secondActivity跳转到MainActivity时,这个时候栈顶是SecondActivity,但是执行了destroy方法。
运行过程:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后
题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等学习资料。
【Android思维脑图(技能树)】
知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。
【Android进阶学习视频】、【全套Android面试秘籍】
希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等学习资料。
【Android思维脑图(技能树)】
知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。
[外链图片转存中…(img-OXNxrVN9-1713624676564)]
【Android进阶学习视频】、【全套Android面试秘籍】
希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!