Activity学习(一):生命周期
一、 认识Activity
Activity是Android的四大组件之一,那么它是什么呢?如果简单的理解,可以把它当成应用的一个显示的屏幕。
Activity类处于android.app包中,继承体系如下:
java.lang.Object
android.content.Context
android.app.ApplicationContext
android.app.Activity
Activity是单独的,用于处理用户操作。开发人员可以通过 setContentView(View)接口把UI放到Activity创建的窗口上,大部分的 Activity子类都需要实现以下两个方法:
onCreate(Bundle)方法是初始化Activity的地方. 在这儿通常可以调用setContentView(int)设置在资源文件中定义的UI, 使用findViewById(int) 可以获得UI中定义的窗口.
onPause()方法是使用者准备离开Activity的地方,在这儿,任何的修改都应该被提交(通常用于ContentProvider保存数据).
程序定义的Activity必须在AndroidManifest.xm文件中进行配置,否则不能使用。
二、 Activity的生命周期
2.1 首先我们看看Activity的生命周期图
理解Activity的生命周期:
public class FirstActivity extends Activity
{
private Button btn1;
private Button btn2; @Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
System.out.println("----onCreate----"); setContentView(R.layout.main); this.btn1 = (Button) findViewById(R.id.btn1);
this.btn1.setOnClickListener(new OnClickListenerImpl());
this.btn2 = (Button) findViewById(R.id.btn2);
this.btn2.setOnClickListener(new OnClickListenerImpl()); } @Override
protected void onStart()
{
super.onStart(); System.out.println("----onStart----");
} @Override
protected void onRestart()
{
super.onRestart(); System.out.println("----onRestart----");
} @Override
protected void onPause()
{
// TODO Auto-generated method stub
super.onPause();
System.out.println("----onPause----");
} @Override
protected void onResume()
{
super.onResume(); System.out.println("----onResume----");
} @Override
protected void onStop()
{
super.onStop(); System.out.println("----onStop----");
} @Override
protected void onDestroy()
{
super.onDestroy(); System.out.println("----onDestroy----");
} private class OnClickListenerImpl implements OnClickListener
{ @Override
public void onClick(View v)
{
int id = v.getId();
switch (id)
{
case R.id.btn1:
Intent i1 = new Intent(FirstActivity.this, SecondActivity.class);
FirstActivity.this.startActivity(i1);
break;
case R.id.btn2:
Intent i2 = new Intent(FirstActivity.this, ThirdActivity.class);
FirstActivity.this.startActivity(i2);
break;
default:
break;
}
} }
}
接下来,我们测试,直接启动应用;
这时,我们点击返回键:
我们重启启动界面,点击第一个按钮,进入第二个界面,然后再点击返回按钮,可看到日志输出:
我们修改ThirdActivity的样式,使其变成一个弹出框式的Activity,只需要再配置该Activity时指定:
<activity
android:name=".ThirdActivity"
android:theme="@android:style/Theme.Dialog" ><span style="font-family: Arial, Helvetica, sans-serif;"></activity></span>
接着,我们重启启动该应用,并点击btn2,可看到日志输出:
我们可以看出,以为ThirdActivity是对话框风格的,所以启动后,FirstActivity并非不可见,只是失去了焦点,所以其并没有进入onStop()方法中,所以在返回到该Activity时,是直接进入了onResume方法,而并没有重启启动(onResult()和onStart()).
三、 Activity生命周期的使用场景
3.1 onDestory的应用:
比如我们开发一个应用,需要用户输入数据,而如果用户一不小心把应用关闭了,那数据就丢失了。 所以,友好的应用应该是我们需要在onDestory()方法中,将用户输入的信息保存下来(文件中),然后在onCreate方法里,再把它取出来。
3.2 onStart的应用:测试网络的环境:
我们希望,当用户进入到界面上时,检查网络,如果网络不可用,则跳转到网络设置界面,而且,必须是用户设置网络成功后,才可行,不然就一直让用户设置网络。 此时,我们可以使用onStart方法,onStart方法是在Activity可见时调用的。
@Override
protected void onStart()
{
super.onStart(); ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if (info != null && info.isConnected())
{
Toast.makeText(this, "网络可用", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(this, "网络不可用", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setClassName("com.android.setting", "com.android.setting.WirelessSettings");
startActivity(intent);
} System.out.println("----onStart----");
}
Activity学习(一):生命周期的更多相关文章
- Android Small插件化框架解读——Activity注册和生命周期
通过对嵌入式企鹅圈原创团队成员degao之前发表的<Android Small插件化框架源码分析>的学习,对Android使用的插件化技术有了初步的了解,但还是有很多需要认真学习的地方,特 ...
- Activity完整的生命周期
首语:群里看到一位网友说:你能说出Activity的完整生命周期吗?看到这句话,我也在反思自己,我也是个fresh,所以想找个时间仔细的扒一扒Activity生命周期. 首先拿一张简单而又复杂的生命周 ...
- 多个Activity交互的生命周期:
一.多个Activity交互的生命周期: A Activity打开B Activity的时候: A Activity B Activity ...
- 三张图让你高速明确activity与fragment生命周期的异同点
第一张图:activity的生命周期 第二张图:fragment的生命周期 第三张图:activity与fragment生命周期对照 补充:假设你还是不明确,请翻译一下你不理解的相应单词. ----- ...
- android:activity活动的生命周期
掌握活动的生命周期对任何 Android 开发者来说都非常重要,当你深入理解活动的生命 周期之后,就可以写出更加连贯流畅的程序,并在如何合理管理应用资源方面,你会发挥的 游刃有余.你的应用程序将会拥有 ...
- Android零基础入门第75节:Activity状态和生命周期方法
前面两期我们学习了Activity的创建和注册.以及启动和关闭,也学会了重写onCraete方法,这些知识在实际开发中远远不够,还需要学习了解更多. 生命周期就是一个对象从创建到销毁的过程,每一个对象 ...
- Android活动(Activity)创建及生命周期
Activity是Android的门面,可以与用户进行互动的重要模块,凡是在应用中可以看到的东西,都是放在活动中的. 在学习新的技术时,我喜欢将需要学习的技术与自己懂得技术进行类似比较,而活 ...
- Activity详解生命周期(Android)
Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器)之 ...
- react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)
react学习小结 本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...
- Activity组件的生命周期
一.Activiy组件的三个状态: 1.前台状态(active) : 在屏幕的最上层,页面获得焦点,可以响应用户的操作2.可视状态(paused) : 不能与用户交互,但是还存在于可视区域内,它依然存 ...
随机推荐
- 模拟7题解 T2visit
T2 visit [组合数学][中国剩余定理] 一场考试难得见两个数学题 本来想矩阵快速幂,显然空间复杂度不行,主要是没时间,就没打 正解: 首先推波式子 1.$C_{t}^{k}$ 在t步中总 ...
- Django用户登陆以及跳转后台管理页面3
Django用户登陆以及跳转后台管理页面1http://www.cnblogs.com/ujq3/p/7891774.html Django用户登陆以及跳转后台管理页面2http://www.cnbl ...
- HDU - 1724 Ellipse 自适应辛普森模板
OJ 题解传送门 //Achen #include<algorithm> #include<iostream> #include<cstring> #include ...
- ML面试1000题系列(71-80)
本文总结ML面试常见的问题集 转载来源:https://blog.csdn.net/v_july_v/article/details/78121924 71.看你是搞视觉的,熟悉哪些CV框架,顺带聊聊 ...
- 直白介绍卷积神经网络(CNN)【转】
英文地址:https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/ 中文译文:http://mp.weixin.qq.com/s ...
- 洛谷 P4205 [NOI2005]智慧珠游戏 DFS
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P4205 [NOI2005]智慧珠游戏 题目描述 智慧 ...
- 阿里云MVP:开发者的超能力,用技术创造更好世界
阿里云MVP:开发者的超能力,用技术创造更好世界 2019年3月,第8期阿里云MVP(最有价值专家)完成终审,截至目前,全球已有27个国家和地区.近500位云计算专家和优秀开发者成为阿里云MVP.阿里 ...
- Python PEP8标准
1.编码 如无特殊情况,文件一律使用utf-8编码 如无特殊情况,文件头部必须添加# -*- coding:utf-8 -*- 标志 2.代码 统一使用四个空格缩进 每行代码不超过80个字符 自然语言 ...
- Linux安装mongoDB步骤和方法
Linux安装mongoDB步骤和方法 下载mongoDB数据库 mongodb-linux-x86_64-3.0.15.tgz 存放到linux文件夹中 ftp软件直接拖上去 解压文件夹(解压后,会 ...
- 【JZOJ4819】【NOIP2016提高A组模拟10.15】算循环
题目描述 输入 输出 样例输入 167 198 样例输出 906462341 数据范围 解法 令f(n)=∑ni=1i,g(n)=∑ni=1i2 易得ans=∑ni=1∑mj=1f(n−i+1)∗f( ...