位置: 编程技术 - 正文

Android中Activity生命周期(android activity finish)

编辑:rootadmin

推荐整理分享Android中Activity生命周期(android activity finish),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android activity stack,android activity finish,android中activity的生命周期方法,android.app.activity,android里activity,android中activity的生命周期方法,安卓中activity的生命周期,android中activity的生命周期方法,内容如对您有帮助,希望把文章链接给更多的朋友!

转自: 在Android中,Activity的生命周期一直是 比较重要的知识点,即使是在面试中也经常被问到。网上已经有很多人写过介绍此内容的文章,本文只是自己的总结笔记,便于以后翻阅。首先上图:

上面那张让人看起来很爽的图就是官方文档中关于Activity生命周期的演示图,Activity共有七个生命周期方法,分别为:

[c-sharp] view plaincopyvoid onCreate(Bundle savedInstanceState) void onStart() void onRestart() void onResume() void onPause() void onStop() void onDestroy()

第一个方法很熟悉吧,当一个android应用启动时,首先就会去调用onCreate(),onStart(),onResume()方法,然后你就可以看到程序的主界面了,如果这时主界面失去了焦点,被另外一个视图覆盖,则会触发onPause()和onStop()方法,再次返回时,又会依次触发onRestart(),onStart()和onResume()方法,原先的界面又重新显示。下面以一个例子具体演示一下。

1、新建Android工程,包含一个按钮,可以启动另外一个Activity,代码如下

[java] view plaincopypackage cn.xiyang.activity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { private static final String TAG = "MainActivity"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(MainActivity.this,OtherActivity.class); startActivity(intent); } }); Log.i(TAG, "onCreate"); } @Override protected void onRestart() { Log.i(TAG, "onRestart"); super.onRestart(); } @Override protected void onResume() { Log.i(TAG, "onResume"); super.onResume(); } @Override protected void onPause() { Log.i(TAG, "onPause"); super.onPause(); } @Override protected void onDestroy() { Log.i(TAG, "onDestory"); super.onDestroy(); } @Override protected void onStart() { Log.i(TAG, "onStart"); super.onStart(); } @Override protected void onStop() { Log.i(TAG, "onStop"); super.onStop(); } }

上述代码生命周期方法中没有写具体的内容,为了观看效果,以log的形式打印出来,可以在LogCat中查看输出的内容。不要忘记在AndroidManifest.xml文件中声明OtherActivity

[xhtml] view plaincopy<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=" package="cn.xiyang.activity" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".OtherActivity" android:label="@string/other"> </activity> </application> <uses-sdk android:minSdkVersion="8" /> </manifest>

2、写好基本代码后,最好首先清理一下LogCat控制台,便于观察。启动之后看到如图所示界面

同时控制台输出了如下几行信息:

其中红色方框中的信息为我们想要注意的信息,此时点击主界面的按钮,启动另外一个Activity,注意观察控制台输出:

可以看到调用了onPause和onStop方法,这里需要说明一下,如果启动的心得Activity并没有完全遮住前面的Activity,则不会触发onStop方法,自会触发onPause方法,这时MainActivity处于暂停状态,如果想要演示这种效果可以吧OtherActivity的Theme设置为Dialog实验一下(设置方法是在AndroidManifest.xml中Activity中添加android:theme="@android:style/Theme.Dialog",其他都不用改)。好,接着本程序然后点击键盘的返回键,返回到前一个页面,查看控制台输出:

Android中Activity生命周期(android activity finish)

看到有调用了如上三个方法,这时再次点击返回按钮,退出程序,查看LogCat控制台:

这时调用了三个方法,退出了程序,Activity生命周期终结。通过上面的实验,我们可以非常完整的理解Activity的生命周期,更好的看懂文章开始的图,同时加深对Activity生命周期的理解。

总结:

一、在 android 中,Activity 拥有四种基本状态:

Active/Runing一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。Paused 当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。Stoped 当 Activity 被另外一个 Activity 覆盖、失去焦点并不可见时处于 Stoped状态。Killed Activity 被系统杀死回收或者没有被启动时处于 Killed状态。

Android 程序员可以决定一个 Activity 的“生”,但不能决定它的“死”,也就时说程序员可以启动一个 Activity,但是却不能手动的“结束”一个 Activity。当你调用 Activity.finish()方法时,结果和用户按下 BACK 键一样:告诉 Activity Manager 该 Activity 实例完成了相应的工作,可以被“回收”。随后 Activity Manager 激活处于栈第二层的 Activity 并重新入栈,同时原 Activity 被压入到栈的第二层,从 Active 状态转到 Paused 状态。例如:从 Activity1 中启动了 Activity2,则当前处于栈顶端的是 Activity2,第二层是 Activity1,当我们调用 Activity2.finish()方法时,Activity Manager 重新激活 Activity1 并入栈,Activity2 从 Active 状态转换 Stoped 状态,Activity1. onActivityResult(int requestCode, int resultCode, Intent data)方法被执行,Activity2 返回的数据通过 data参数返回给 Activity1。

二、Activity栈

Android 是通过一种 Activity 栈的方式来管理 Activity 的,一个 Activity 的实例的状态决定它在栈中的位置。处于前台的 Activity 总是在栈的顶端,当前台的 Activity 因为异常或其它原因被销毁时,处于栈第二层的 Activity 将被激活,上浮到栈顶。当新的 Activity 启动入栈时,原 Activity 会被压入到栈的第二层。一个 Activity 在栈中的位置变化反映了它在不同状态间的转换。

参考文档:

Google Android 的开发者网站: OPhone 网站关于 OPhne 的文章:

error: Error parsing XML: unbound prefix 如图所示:纠结了半天,不停的检查是不是自定义的控件有问题,后来发现是由于从另外一个布局中copy过来的,在R.java文件中无对应的id导致,可以注

UIAutomator在AndroidStudio中的使用 这几天在看UIAutomator,但网上关于UIAutomator的基本上都是基于Eclipseadt的,很少有androidstudio的,所以在这里总结下,省的以后忘记了。androidStudio是支持UIAuto

Android 下拉刷新框架实现 前段时间项目中用到了下拉刷新功能,之前在网上也找到过类的demo,但这些demo的质量参差不齐,用户体验也不好,接口设计也不行。最张没办法,终于

标签: android activity finish

本文链接地址:https://www.jiuchutong.com/biancheng/386761.html 转载请保留说明!

上一篇:android 加载的一些收藏(android 加载大量图片)

下一篇:error: Error parsing XML: unbound prefix

  • 小规模纳税人销售额超过500万
  • 民非 企业所得税
  • 什么是土地使用权终结
  • 破产企业发放工资要不要纳税?
  • 所得税汇算清缴账务处理
  • 运输公司税率和税种
  • 超过认证期的发票能用吗
  • 拿工资要开发票,发票去哪儿开?
  • 生产领用周转材料
  • 自然人税务系统扣缴客户端怎么申报
  • 学校付学生的现金奖励入什么科目
  • 发放短期外汇贷款的意义
  • 企业所得税怎么征收几个点
  • 未开票收入为负数如何写说明
  • 税友软件费用
  • 小规模减免附加税会计分录怎么做
  • 罚款收入增值税税率是多少
  • 企业的筹资费用哪里找
  • 或有负债可以是现时义务吗
  • 会员卡充值赠送金额怎么做账
  • 受托加工物资产生的成本怎么做会计核算?
  • 咨询公司怎么交社保
  • 收到电子银行承兑汇票怎么做账务处理
  • 复核未通过
  • 经营性资产和非经济资产
  • 现金流量表怎么编制
  • 长期待摊费用科目还用吗
  • linux 部署
  • 增值税进项税额转出的情况有哪些
  • 企业借款费用处理不当会产生什么样的后果呢?
  • 同步和异步的关系
  • 行政事业单位的主要经济业务活动有哪些
  • 今日除夕吉时
  • 停在花朵上,好像在认真的听同学们读课文修改病句
  • 10分钟学会万用表
  • 编写jsp程序,实现简易计算机
  • vue快速入门
  • php sha1加密 解密
  • 机器人折旧年限
  • 收到税务局信息
  • 工资可以当月计提当月发放怎么做账
  • 不同单位发的劳务费会收税吗
  • 注册资本印花税最新政策2023年
  • 存货计提减值准备对所得税的影响
  • 企业设立账簿
  • 个人所得税年度累计扣税规则
  • 支出应计入管理费用,而且要根据其发生额
  • 什么是税后利息支出
  • 车辆抵押贷款怎么办理
  • 红字撤销需要带什么去税务局
  • 商业承兑汇票风险高吗
  • 充卡送礼品送些什么好
  • 预收账款年底是不是不能有余额
  • 盈余公积的用途主要是
  • 税控维护费是什么意思
  • 汇票和本票的区别是
  • 哪些项目的进项可以抵扣
  • 预付购买设备款
  • mysql格式化日期yyyy/mm/dd
  • mac电脑怎么安装ie浏览器
  • ubuntu14打开终端
  • centos etc
  • speedupmypc.exe - speedupmypc是什么进程
  • win10 系统
  • 删掉sam文件后无法开机
  • CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放
  • jquery validate表单校验
  • 常用dos命令大全及用法
  • shell脚本 -ne 0
  • jquery.treegrid
  • jQuery的ajax和遍历数组json实例代码
  • jquery下拉列表框
  • javascript定义数组的方法
  • pdb settrace
  • 财税专家刘杨简历图片介绍
  • 出口免税不退税主要适用于什么情形
  • 朝阳区下面分几个区
  • 江苏国税局官网
  • 怎样在开票系统中增加新的名称
  • 上海交电费户号8位数
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设