IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android activity基础 -> 正文阅读

[移动开发]Android activity基础

activity生命周期

  1. create -> start -> resume -> (operating) -> pause -> stop -> destroy
  2. 返回键:pause -> stop -> destroy
  3. 旋转:pause -> stop -> destroy ->(重建)create -> start -> resume
  4. 按下Home键然后重新打开应用: pause-> stop ; 重新启动(后台保留): restart -> start -> resume
  5. 用activity去启动其他的activity:先执行暂停 pause ->(create -> start -> resume) ->stop
  6. 用activity去启动其他的activity(已存在并且不是standard模式启动):需要启动的activity会执行onNewIntent ->resume

Q

  1. start-stop/ resume- pause 区别:

    • 在 stop 阶段 已经不可见了,在onstart开始就可见了; 而在 Pause阶段是从前台到后台(无法直接交互)

    • 一个典型的例子是activity采用透明主题:回退时不会执行stop,因为仍可见;又例如在一个activity里打开另一个activity但是没完全覆盖,则不会执行stop

    • 透明主题的使用:在manifest中直接指定主题:android:theme="@android:style/Theme.Translucent.NoTitleBar";遇到的错误:AppcompaActivity相比activity:theme主题只能用android:theme=”@style/AppTheme (appTheme主题或者其子类),而不能用android:style

  2. 不同生命周期的任务:

    1. create: 指定 XML 布局文件;定义成员变量(初始化控件);数据恢复(savedInstance).此时布局view还未建立
    2. resume:Activity已在在屏幕上显示UI并允许用户操作.打开相机或开启动画;注册动态广播
    3. pause:关闭独占设备camera,关闭动画 (这也是为什么前面第5点暂停执行的原因);解绑动态广播;临时存储希望保存的数据,不能处理耗时操作
    4. stop: 适合cup-intensive的关闭操作,适合处理heavy-load的task:例如数据库的写入
    5. restart:一般不做什么

启动模式

  1. 通过launchMode静态指定:
    1. 特别注意的是 singleTask ,它会先去寻找自己的栈是否存在:如果不存在直接创建,如果存在,查找是否栈内有这个activity,若有,弹出其上面的activity,然后调用这个activity的NewIntent. 自己栈是由 TaskAffinity 指定,默认情况下为包名
  2. 用flags设定启动模式/影响activity运行状态
    1. FLAG_ACTIVITY_CLEAR_TOP, 当 activity 为standard时, 连同它本身出栈,重新create,否则效果和singleTask相同.
    2. FLAG_ACTIVITY_NO_HISTORY 不会放入回退栈
  3. 特殊属性 allowTaskReparenting:(更改父项)
    1. 一种场景两个应用A,B,在A中启动B的一个activity b(b的启动方式为standard/singleTop),此时,虽然TaskAffinity不同,但是启动的b在A的栈中,当我们启动B应用时,不会看到B的home,系统发现b的任务栈被创建了,将b放到的B的栈顶,因此看到的是b.这个场景的现实例子是,我在微信里打开微博的连接,跳转到微博的一个activity,当我再打开微博时,还是这个activity
  4. 不同的启动方式实际应用(这一块需要补充):
    1. singleTask适合作为程序入口点。例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面
    2. singleInstance适合需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离
    3. singleTop 通知打开页
    4. 不是很熟悉 一些参考1 一些参考2

Intent

  1. Intent数据传递:

    • 基础数据结构可以直接通过putExtra,get…Extra得到
    • 自定义则通过实现Serializable接口传递对象,另一种是通过实现Parcelable接口传递对象,android 中优先选择parcelable
      • 选择:Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC;而Parcelable不能使用在要将数据存储在磁盘上的情况
      • Bundle 会对 intent.putExtra("media_id", "a1b2c3") 打包:=> Bunle b=new Bundle() b.put...("",""),让对象序列化就是让对象能够被打包形成键值对的形式
  2. Intent-filter匹配规则:

    • action: 每个Intent有且仅有一个action,与过滤器的其中一个匹配即可

    • category:可以有多个,多个需与过滤器完全匹配

    • data:

      • URI: 是一种结构规范:我们可以提取结构的相应部分 很不错的文章

        : ?#

        其中为@:

      • mimeType:媒体类型,有image/jpeg,video/*,text/plain

      • 设置: setDataAndType("","")

  3. 判断是否有匹配的intent,防止崩溃:

    intent.resolveActivity(packageManager)!=null
    

异常旋转销毁

  1. 系统配置改变,会调用回调SaveInstanceState在stop()前,收集到的bundle可以传递给oncreate和onRestoreInstance,这个在start后调用
  2. 不想要旋转发生变化:指定android:configuration=“orientation|screensize”,上述的回调不会调用,转而调用onConfigurationChanged回调

Android 面试黑洞——当我按下 Home 键再切回来,会发生什么

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-01-04 13:32:50  更:2022-01-04 13:33:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:41:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码