首先看看Activity是什么
如图可知,activity是个类,大致说明如下
activity是用于创造界面并和用户交互用的,这样的作用可以说是Android应用的基础,自然是四大组件之一了。
具体用法直接讲activity内的一些方法使用就行了
先来新建工程并自己创建activity。新建工程其他不变把empty activity那个选成第一个就不会自动创建activity了。
创建后打开AndroidManifest,如下(我用的是project方式的目录)
在com.example.a86275.activity_test2右键new->Activity->empty Activity
变化如下
可见activityManifest多了一行,由前面大致说明里可知,activity都需要在这个文件里声明,android studio自动帮我们生成了
声明格式大致是:<activity 一些属性> </activity>
同时生成的还有res下的layout
这是activity的布局文件,前面说了activity主要任务之一布置界面,这个文件就用于创造界面
此时点run还是不行的,因为activity需要有一个被指定为启动时运行的activity才行
在之间加上
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
如图
此时应该能运行app,虽然没什么效果。
稍微讲下activity里的代码
public class MainActivity extends AppCompatActivity {
@Override//伪代码,表示接下来要重写一个方法而不是定义一个新方法,如果打错了重写的方法名就会报错
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);//官网sdk里关于onCreate等方法说了都要调用父类的对应方法,翻翻源码可以看出父类里这些方法有一些操作需要被调用
setContentView(R.layout.activity_main);//加载布局文件
}
}
为了接下来测试一下activity的方法,先学一点在屏幕上显示字符的方法,这里用的是toast
A toast is a view containing a quick little message for the user. The toast class helps you create and show those.
如何instantiate(嘿嘿,记个单词)它呢,估计是临时用下的场合比较多,有静态方法可以调用,无需先创建对象
这3个参数主要是第一个第一次见到可能无法体会它是啥。context 上下文,说明了应用程序的运行环境,包括目前在做的事
拥有的资源,按照我目前的理解(不一定准确)安卓里把某些当前存在的类的实例作为上下文。
细心看下
发现activity也是继承自context的,所以一个activity 一个service(也是继承于context)都可以是一个context
加了一句Toast.makeText(this,"onCreate",Toast.LENGTH_SHORT).show();
解释一下,就是调用makeText返回toast对象后调用show方法显示,this就是activity的引用作为context参数
效果:activity启动后系统调用onCreate方法 在下方显示字符onCreate。
接下来讲activity生命周期
在activity从启动到结束的过程中,会经历一些关键性的阶段,每个阶段系统都会执行activity里相应的方法,
我觉得要做的就是了解这些方法什么时候被执行,合理的重写它们,在相应阶段做合适的操作。
生命周期里的方法总共七个,我大致分为三类:
1、准备阶段,onCreate、onStart、onResume
2、终止阶段,onPause、onStop、onDestroy
3、恢复部分阶段,onRestart
接下来说说各个方法代表的状态
1、onCreate 当Activity创建时执行,一些最基本的初始化,准备都放在这,如setContentView加载布局,findViewById等
2、onStart 此时Activity可见了(并不能看见?。。。我感觉这里的可见是只准备好要显示的图像数据),但未获得焦点。
3、onResume 此时Activity获得焦点,用户可以进行交互,可以在这开启一些独占设备。虽然获得焦点,但并不一定能看见,在其上可能会有一些系统窗口,要准确在窗口可见的时候执行应重写onWindowFocusChanged(boolean)
4、onPause失去焦点,当从当前activity转到另一个activity时,只有这个被执行完才会转到另一个activity,因此如果这里太耗时就会影响后面打开的时间,一般在这关掉一些很耗cpu的东西和释放独占设备,它与onResume对应
5、onStop 对应onStart,此时变为不可见,这个方法在系统资源不够要关闭这个进程时,这个不会被执行
6、onDestroy对应onCreate,此处不能用于保存数据(应放在onPause,因为onDestroy不一定会被执行),此处最好做一些工作完成之后的收尾,比如销毁线程。实际使用时发现父activity启动子activity后返回,子activity会调用此方法
上述3对对应的状态做的事最好也相互对应
7、onRestart activity因为某些原因(如按home键)变为onStop,又被重新打开,就会先执行onRestart在执行onStart
这些方法被重写后都要调用父类的对应方法
最后放上官网这张activity生命周期图