专栏首页子勰随笔再看Android官方文档之Activity&Intent

再看Android官方文档之Activity&Intent

Activity生命周期:

指定程序首次启动的Activity

  • 如果程序中没有声明MAIN action或者LAUNCHER category的activity,那么在设备的主界面列表里面不会呈现app图标。

创建与销毁

onCreate

  • onCreate里面尽量少做事情,避免程序启动太久都看不到界面
  • activity在onStart()被调用后开始被用户可见

OnDestroy

  • activity应该在onPause()与onStop()中执行清除activity资源的操作
  • 如果activity含有在onCreate调用时创建的后台线程,或者是其他有可能导致内存泄漏的资源,则应该在OnDestroy()时进行资源清理,杀死后台线程。
  • 除非程序在onCreate()方法里面就调用了finish()方法,系统通常是在执行了onPause()与onStop() 之后再调用onDestroy() 。

暂停与恢复

onPause

  • 为了切换的顺畅要减少在OnPause()方法里面的工作量(避免在onPause时执行CPU-intensive 的工作,如写数据到DB等,它会导致切换变得缓慢。应该把他们放到onStop去做)。

停止与重启

onStop

  • 当activity调用onStop()方法, activity不再可见,并且应该释放那些不再需要的所有资源。
  • 极端情况下,系统会直接杀死app进程而并不执行activity的onDestroy()回调方法(系统内存紧张不在此情况下), 因此我们需要使用onStop()来释放资源,从而避免内存泄漏。(这点需要注意)
  • 应用不需在恢复到Resumed状态前重新初始化那些被保存在内存中的组件,系统在activity已经停止后,会将Activity对象保存在内存。

重新创建

onSaveInstanceState

  • 被系统用来恢复之前状态而保存的数据被叫做 “instance state” ,它是一些存放在Bundle对象中的key-value pairs。
  • 当用户离开Activity时,系统会调用onSaveInstanceState。当系统调用这个函数后,会在Activity被异常Destory时传递 Bundle 对象,这样我们就可以增加额外的信息到Bundle中并保存到系统中。
  • 若系统在Activity被Destory之后想重新创建这个Activity实例时,之前的Bundle对象会(系统)被传递到你我们activity的onRestoreInstanceState()方法与 onCreate() 方法中。
  • 跳转到其他的activity或者是点击Home都会导致当前的activity执行onSaveInstanceState。
  • 从跳转的activity点击back回到前一个activity,那么跳转前的activity是执行退栈的操作,所以这种情况下是不会执行onSaveInstanceState的,因为这个activity不可能存在需要重建的操作。
  • 必须要调用 onSaveInstanceState() 方法的父类实现,这样默认的父类实现才能保存视图状态的信息。

恢复Activity

onRestoreInstanceState

  • onCreate与 onRestoreInstanceState回调方法都接能收到onSaveInstanceState回调的Bundle
  • onRestoreInstanceState方法会在 onStart方法之后执行. 系统仅仅会在存在需要恢复的状态信息时才会调用 onRestoreInstanceState。

Intent的发送

建立隐式的Intent

  • 为了验证是否有合适的activity会响应隐式的intent,需要执行queryIntentActivities() 来获取到能够接收这个intent的所有activity的list。若返回的List非空,那么我们才可以安全的使用这个intent。
  • 为了显示chooser, 需要使用createChooser()来创建Intent,这样就可以列出可以响应createChooser()中Intent的app,并且指定了标题。

接收Activity返回的结果

  • 在执行startActivityForResult()时,可以使用explicit 或者 implicit 的intent。当启动另外一个位于的程序中的activity时,我们应该使用explicit intent来确保可以接收到期待的结果。

Intent过滤

  • 当app被安装到设备上时,系统可以识别intent filter并把这些信息记录下来。当其他app使用implicit intent执行 startActivity() 或者 startActivityForResult()时,系统会自动查找出那些可以响应该intent的activity。
  • 返回Result时默认的result code是RESULT_CANCELED.因此,如果用户在没有完成操作之前点击了back key,那么之前的activity接受到的result code就是”canceled”。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于Instrumentation框架的自动化测试 - Android自动化测试系列(四)

    子勰
  • 在Linux服务器(ubuntu 16)上部署多套PHP环境

    子勰
  • iMac使用过程中的简单故障解决

    子勰
  • 提示[译] Android 生命周期备忘录 —— 第四部分:ViewModel、半透明 Activity 及启动模式

    ViewModel 的生命周期非常简单:它只有 onCleared 这一个回调。但是,这个函数的作用域在 activity 和 fragment 中是有区别的:

    Android 开发者
  • Android四大组件完全解析(一)---Activity

    本文参考\android\android\frameworks\base\core\java\android\app\Activity.java文件中的类注释,...

    fanfan
  • 安卓开发之Activity传递参数

    1、知识点:启动activity、注册activity、button绑定监听事件、传递参数、获取参数 2、传递参数以及绑定监听代码(注意如果绑定监听出现错误:需...

    苦咖啡
  • Android 中Fragment与Activity通讯的详解

    尽管fragment的实现是独立于activity的,可以被用于多个activity,但是每个activity所包含的是同一个fragment的不同的实例。 ...

    砸漏
  • Appium+python自动化27-android特有的wait_activity

    前言 在启动app的时候,如果直接做下一步点击操作,经常会报错,于是我们会在启动完成的时候加sleep。 那么问题来了,这个sleep时间到底设置多少合适呢?设...

    上海-悠悠
  • 教你自己写Android第三方库

    其实Android studio的出现很大程度上方便了我们Android开发人员,今天我们说说怎么构建我们自己的库。 依次按File->New Moudle->...

    xiangzhihong
  • Activity堆栈管理

    task就好像是能包含很多activity的栈。 默认情况下,一个activity启动另外一个activity时,两个activity是放在同一个task栈中...

    xiangzhihong

扫码关注云+社区

领取腾讯云代金券