探究安卓活动——活动的启动模式

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移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等学习资料。

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

Android开发8年,阿里、百度一面惨被吊打!我是否应该转行了?

【Android进阶学习视频】、【全套Android面试秘籍】

希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等学习资料。

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

[外链图片转存中…(img-OXNxrVN9-1713624676564)]

【Android进阶学习视频】、【全套Android面试秘籍】

希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值