Android学习day02

自勉

有死之荣,无生之辱。每天早上几乎十点才能坐在这里学习,罪恶罪恶
昨天学校停电,我认为是不能算的,今天其实算是day03
昨天也是没有学习,今天算是day04
记录一下,今天是day05,有些东西真的是很难理解啊,但是这个第二章只剩一点了,没必要再起一个博客了,继续写完吧。

继昨天的学习day01

1.1继续活动的学习

复习:昨天学习了如何创建了空的activity,然后如何加入组件,在活动项目中加入显示空间,在AndroidManifest注册,和一些Toast,Menu,finish的小操作。
那么继续学习新的2.3

2.1 使用Intent

intent作用是让一个活动跳转到另一个活动上,Intent分为显式
2.1.1使用显式Intent

Intent intent =new Intent(FirstActivity.this,SecondActivity.class);
startActivities(new Intent[]{intent});

第一个参数传入自身的类,第二个参数传入想要跳转的类。
使用这种方式启动活动的意图非常明显,称为显式
2.1.2使用隐式Intent
指定一系列抽象的action和category然后交由系统来判断分析Intent,来找出合适的活动去启动。
这个感觉没法写啊,现在理解也理解不深,等以后再深入补吧。

2.2活动的生命周期

2.2.1 返回栈

大意就是APP的运行模式是栈式的,系统总是会显示栈顶的活动给用户。

2.2.2 活动状态

运行状态 -> 暂停状态 -> 停止状态 -> 销毁状态

运行状态: 处于返回栈栈顶
暂停状态:不在栈顶但可见
停止:不在栈顶并不可见
销毁:移除出返回栈

2.2.3 活动生存周期

onCreate()。在活动第一次被创建时使用
onStart()。活动由不可见变可见
onResume()。活动准备和用户进行交互的时候调用,此时处于运行状态。
onPause()。准备去启动或恢复另一个活动时调用。这个方法会将一些CPU资源释放掉以及保存一些关键数据。
onStop()。在活动完全不可见的时候调用,它和Pause方法的区别在于如果启动的新活动是对话框式的活动,那么pause方法就会执行,stop不会执行。
onDestroy()。活动在完全销毁之前调用,活动状态会变为销毁状态。
onRestart()。这个活动由停止状态变成运行状态之前调用,活动被重新启动了。

在这里插入图片描述

3种生存期
1、完成生存期,关于方法Create、Destroy,Create完成各种初始化操作,Destroy完成内存释放的操作。
2、可见生存期,关于方法Start、Stop,在可见生活期,活动总是对用户可见的,即便是可能不与用户进行交互,通过这两个办法合理的管理用户可见的资源,
3、前台生存期,Resume和Pause方法,活动总是处于运行状态,

2.2.4 实验生命周期
代码在AppLifeCycle里,没什么可说的,但是有一点值得说,为了完成onPause,需要进行一个dialog框的处理,Android studio中在AndroidManifest.xml里的设置主题为@android:style/Theme.Dialog,程序崩溃了。将主题设置为android:theme="@style/Theme.AppCompat.Dialog"能够解决此问题

2.2.5 活动被回收了怎么办
问题描述:在活动A基础上打开活动B,然后因为内存不足,自动回收掉了活动A,当你再返回活动A时,打开的是onCreate而不是onRestart。
Activity提供了一个onSaveInstanceState()回调方法,这个方法可以保证在活动被回收之前一定被调用,储存一些信息,携带一个Bundle类型参数

2.2.6活动的启动模式

需要特定的需求来给每个活动指定恰当的启动模式,一共为4种,分别是standard,singleTop,singleTask,singleInstance。通过指定android:launchMode

standard:假设活动A的基础上再打开活动A,会进行覆盖,就是再创建一个A,但这并不符合正常使用情况。说白了它不在意返回栈中是否有这个活动,只要有活动就创建。

singleTop:这个启动模式开始检测返回栈的栈顶,假设活动A在栈顶,那么就不会再创建一个新的A,但是这个模式有一个缺点,就是如果活动A基础上打开一个活动B,那么再在活动B上打开活动A就会产生新的活动A,然后再在新活动A上打开活动B,会产生新的活动B。

singleTask:这个就比较奇怪了,意思说一下吧,就是新开一个活动A,先看看返回栈内有没有已经存在的活动A,如果没有直接入栈,然后再打开活动B,B也是先检查返回栈内有没有已经存在活动的B,如果没有直接入栈,然后此时再打开活动A,它检查到之前栈内有已经存在的活动A,那他就把活动B也出栈,然后Restart活动A。

singleInstance:这个是最奇怪的,意思就是这个启动模式的会自己独享一个返回栈在这里插入图片描述

2.3活动的实践

加油,干完这个
2.3.1你在当前的哪个活动?
书上的方法是新建一个类,然后继承AppCompatActivity,然后重写onCreate方法,多加一个获取当前实例的类名。让其他活动继承这个新类。

public class BaseActivity extends AppCompatActivity {
    @Override
    protected  void onCreate(Bundle saveInstanceState){
        super.onCreate(saveInstanceState);
        Log.d("BaseActivity",getClass().getSimpleName());
    }
}

2.3.2随时随地退成程序
你在一个返回栈里有多个活动,想一个个返回最后关闭很慢,解决方法:新建一个ActivityCollector作为管理类。

2.3.3启动活动的最佳写法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值