Android_Acitivity

首先看看Activity是什么

https://images2017.cnblogs.com/blog/1104670/201801/1104670-20180131121722000-59980774.png

如图可知,activity是个类,大致说明如下

https://images2017.cnblogs.com/blog/1104670/201801/1104670-20180131121906500-350561552.png

activity是用于创造界面并和用户交互用的,这样的作用可以说是Android应用的基础,自然是四大组件之一了。

具体用法直接讲activity内的一些方法使用就行了

先来新建工程并自己创建activity。新建工程其他不变把empty activity那个选成第一个就不会自动创建activity了。

创建后打开AndroidManifest,如下(我用的是project方式的目录)

https://images2017.cnblogs.com/blog/1104670/201801/1104670-20180131123538046-564811448.png

在com.example.a86275.activity_test2右键new->Activity->empty Activity

变化如下

https://images2017.cnblogs.com/blog/1104670/201801/1104670-20180131124410296-1657638300.png

可见activityManifest多了一行,由前面大致说明里可知,activity都需要在这个文件里声明,android studio自动帮我们生成了

声明格式大致是:<activity 一些属性> </activity>

同时生成的还有res下的layouthttps://images2017.cnblogs.com/blog/1104670/201801/1104670-20180131130420546-1313410484.png

 这是activity的布局文件,前面说了activity主要任务之一布置界面,这个文件就用于创造界面

此时点run还是不行的,因为activity需要有一个被指定为启动时运行的activity才行

在之间加上

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

如图https://images2017.cnblogs.com/blog/1104670/201801/1104670-20180131192307421-952138711.png

此时应该能运行app,虽然没什么效果。

 https://images2017.cnblogs.com/blog/1104670/201801/1104670-20180131194846734-259576805.png

稍微讲下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(嘿嘿,记个单词)它呢,估计是临时用下的场合比较多,有静态方法可以调用,无需先创建对象

https://images2017.cnblogs.com/blog/1104670/201801/1104670-20180131222453593-1705184481.png

3个参数主要是第一个第一次见到可能无法体会它是啥。context 上下文,说明了应用程序的运行环境,包括目前在做的事

拥有的资源,按照我目前的理解(不一定准确)安卓里把某些当前存在的类的实例作为上下文。

细心看下https://images2017.cnblogs.com/blog/1104670/201801/1104670-20180131225758250-123104741.png

发现activity也是继承自context的,所以一个activity 一个service(也是继承于context)都可以是一个context

https://images2017.cnblogs.com/blog/1104670/201801/1104670-20180131230155718-376712966.png

加了一句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生命周期图
https://images2017.cnblogs.com/blog/1104670/201802/1104670-20180203235809812-1629420397.png

猜你喜欢

转载自blog.csdn.net/sinat_30457013/article/details/89380950