fragment生命周期

面试官:“会不会熟练使用Jetpack” 我:“......”

北城以北 提交于 2020-03-11 01:12:33
面向标准化开发已成现实 金三银四,相信有不少读者在抓紧机会面试。 Android 市场已今非昔比。在过去,迫于招人的压力,应试者只需了解四大组件、视图、网络请求,即可谋得一份满意的工作。 现如今,Jetpack 架构组件 及 标准化开发模式 的确立,意味着 Android 开发已步入成熟阶段: 许多 样板代码 不再需要开发者手写,而是可以通过模版工具 自动生成,在取缔繁杂耗时的重复工作的同时, 避免因人工操作的疏忽,而造成难以排查、不可预期的错误 。 这十分符合企业的利益,因而面试官在招人的时候,也更加看重应试者对 架构组件 —— 至少是 MVVM 的理解程度。🧐 像“解耦”等 含糊其辞的说法,已经不能够被面试官所认可,稍微对 MVVM 有一点经验的面试官都会请你举例说明,好证明你确实对 MVVM 有着正确、深入的理解,能够自然而然地写出标准化、规范化的代码,能够迅速适应 各家公司自制的 自动化模版工具。 本文的目标 本人拥有 3 年的 移动端架构 践行和设计经验,领导团队重构的中大型项目多达十数个,对 Jetpack MVVM 架构在确立规范化、标准化 开发模式 以减少不可预期的错误 所作的努力,有着深入的理解。 因而本文的目标,就是结合前几期我们分别 深入浅出 介绍过的 Lifecycle、LiveData、ViewModel、DataBinding,来融汇贯通地演绎一下:

Glide源码解析一,初始化

爱⌒轻易说出口 提交于 2020-03-05 20:08:19
转载请标明出处: https:////www.cnblogs.com/tangZH/p/12409849.html Glide作为一个强大的图片加载框架,已经被android官方使用,所以,明白Glide的加载流程以及原理对加深我们对glide的理解是很重要的。 本文基于glide 4.11 Glide.with(this).load("").into(new ImageView(this)); 我们从这一句入手,先看看Glide的初始化过程,也就是Glide.with(this)这个方法。 一、单例实例化 可以看到里面有多个重载方法,最常用的是这个,这些方法最终返回的是 RequestManager 。 都一致调用了 getRetriever(...).get(view) 。 我们看一下 getRetriever(...) 里面做了什么。 getRequestManagerRetriever()返回的是一个RequestManagerRetriever,我们主要看的是Glide.get(context) 可以看到Glide.get(context)里面进行了初始化的操作,它是我们熟悉的单例模式。最终会调用 二、GlideModule配置加载 上面的get方法中,我们需要注意这一句: GeneratedAppGlideModule annotationGeneratedModule

Activity和Fragment生命周期对比

僤鯓⒐⒋嵵緔 提交于 2020-02-29 03:41:26
Fragment生命周期 onAttach onCreate onCreateView onActivityCreate ______以上相当于Activity的onCreate方法 onStart ______相当于Activity的onStart方法 onResume ______相当于Activity的onResume方法 onPause ______相当于Activity的onPause方法 onStop ______相当于Activity的onStop方法 onDestroyView onDestroy onDetach ______以上相当于Activity的onDestroy方法 当Activity包含一个Fragment的时候,Activity和Fragment生命周期的变化: Activity(onCreate)---> Fragment(onAttach onCreate onCreateView onActivityCreate)---> Activity(onStart)---> Fragment(onStart)---> Activity(onResume)---> Fragment(onResume)---> Fragment(onPause)---> Activity(onPause)---> Fragment(onStop)---> Activity

android 架构组件 - viewmodel

匆匆过客 提交于 2020-02-10 00:26:45
ViewModel 类旨在以生命周期的方式存储和管理与ui相关的数据。 ViewModel 类允许数据在诸如屏幕旋转之类的配置更改中存活。 注意:要将ViewModel导入到您的Android项目中,请参见 向您的项目添加组件 。 Android框架管理UI控制器的生命周期,比如activities和fragments。 该框架可能会决定销毁或重新创建UI控制器,以响应完全超出您控制的某些用户操作或设备事件。 如果系统破坏或重新创建一个UI控制器,那么存储在其中的任何与UI相关的数据都将丢失。 例如,你的应用可能会在其中一个activity中包含一个用户列表。 当为配置更改重新创建activity时,新activity必须重新获取用户列表。 对于简单的数据,该activity可以使用 onSaveInstanceState() )方法,并从 onCreate() )中的bundle中恢复其数据,但是这种方法只适用于少量的数据,这些数据可以序列化然后反序列化,而不是像用户列表或位图那样的潜在的大量数据。 另一个问题是UI控制器经常需要进行异步调用,这可能需要一些时间才能返回。 UI控制器需要管理这些调用,并确保系统在被销毁后清除它们,以避免潜在的内存泄漏。 这种管理需要大量的维护,并且在为配置更改重新创建对象的情况下,由于对象可能不得不重新发出已经发出的调用,这是对资源的浪费。

Android 常用开源框架源码解析 系列 (四)Glide

瘦欲@ 提交于 2020-01-29 04:02:58
一、定义 Glide 一个被google所推荐的图片加载库,作者是bumptech。对Android SDk 最低要求是 API 10 与之功能类似的是Square公司的picasso 二、基本概念 Model :数据来源 :Uri、本地文件、资源ID Data :加工数据 Resource :对原始数据进行解码,解码之后的资源 resource Resource decode :资源解码器 TransformedResource:转换资源 TranscodedResource:转码,将静态、Gif动态图进行格式转换以便能加载 Target :目标图片 三、整体流程 A:Model图片数据源 ———ModelLoader加载—>原始数据Data——Decoder解码——> Resource——Transform裁剪——>TransformResource——Transcode转码——>TranscodeResource——封装——>Target 四、源码 引入 :compile 'com.github.bumptech.glide:glide:3.7.0' 4.1、使用流程三步曲: Glide .with(“上下文context”) .load(“url”) .into(“显示的控件资源"); 4.2、常用加载图片的配置参数: public void LoadImage(View

Android Jetpack系列——ViewModel源码分析

人走茶凉 提交于 2020-01-28 21:10:24
本文章已授权微信公众号郭霖(guolin_blog)转载。 本文章主要是对 ViewModel 进行源码分析,建议对着 示例代码 阅读文章, 示例代码 如下: ViewModelDemo 本文章使用的是 Android SDK 29 的源码分析。 定义 Android框架管理 UI控制器的生命周期 (例如: Activity 和 Fragment ), Framework 可能决定 销毁 或者 重新创建一个UI控制器 ,以响应某些用户操作或者设备事件,这些操作或者事件完全超出你的控制。 如果系统 销毁 或者 重新创建一个UI控制器 ,那么你存储在其中的任何 与UI相关的临时数据 都 丢失 ,例如:你的应用程序在某个 Activity 中包含一个用户列表,当 配置信息 更改重新创建 Activity 时,新的 Activity 必须重新获取用户列表。对于简单数据, Activity 可以使用 onSaveInstanceState() 方法,并且在 onCreate() 方法中从 Bundle 中恢复数据,但是这种方法只适用于 少量的、可以序列化和反序列化的数据 ,而不是 潜在的大量数据的用户列表 或者是 很多的Bitmap 。 另外一个问题是 UI控制器 经常需要进行 异步调用 ,这可能需要一些时间才能返回, UI控制器 需要管理这些调用,并确保系统在 销毁 后对其进行清理,以避免

Android - Android 面试题集 -- Android 部分答案

萝らか妹 提交于 2020-01-24 05:19:22
2.1 Activity 1.Activity是什么? Activity是Android的四大组件之一。是用户操作的可视化界面;它为用户提供了一个完成操作指令的窗口。 当我们创建完毕Activity之后,需要调用setContentView()方法来完成界面的显示;以此来为用户提供交互的入口。 2.典型情况下的Activity生命周期? Activity启动–>onCreate()–>onStart()–>onResume() 点击home键回到桌面–>onPause()–>onStop() 再次回到原Activity时–>onRestart()–>onStart()–>onResume() 退出当前Activity时–>onPause()–>onStop()–>onDestroy() 3.异常情况下的Activity的生命周期 & 数据如何保存和恢复? 在onStop之前调用onSaveInstanceState保存当前Activity状态,当Activity被重新创建后,系统调用 onRestoreInstanceState,并且把Activity销毁时onSaveInstanceState方法所保存的Bundle对象 作为参数传递给onRestoreInstanceState和onCreate方法 onRestoreInstanceState的调用时机发生在onStart之后

理解响应式编程,来一波LiveData的深入解析

爷,独闯天下 提交于 2020-01-19 12:19:38
/ 开始 / 本文章主要是对LiveData进行源码分析,本文章使用的是Android SDK 29的源码分析。 / 定义 / LiveData是一种可观察的数据存储器类,它具有生命周期感知能力,遵循应用组件(例如:Activity、Fragment、Service(可以使用LifecycleService,它是实现了LifecycleOwner接口的Service))的生命周期,这种感知能力确保LiveData仅更新处于活跃生命周期状态的应用组件观察者。 如果观察者(由Observer类表示)的生命周期处于STARTED或者RESUMED状态,那么LiveData会认为该观察者处于活跃状态,就会将更新通知它,而那些观察LiveData对象而注册的非活跃观察者不会收到更改通知。 应用组件都实现了LifecycleOwner接口,有了这种关系后,当相应的Lifecycle对象的状态变为DESTROYED时,就会移除这些观察者。 使用LiveData的优势: 确保界面符合数据状态 LiveData遵循观察者模式,当生命周期状态发生变化的时候,它就会去通知Observer对象,然后去更新界面。 不会发生内存泄露 当应用组件的生命周期处于DESTROYED状态时,就会移除这些观察者,使其不再持有应用组件的引用。 不会因Activity停止而导致崩溃 如果观察者的生命周期处于非活跃状态(例如

安卓Fragment生命周期

a 夏天 提交于 2020-01-18 09:06:27
Fragment生命周期与Activity相似 Fragment必须依赖于Activity才能运行,所以Activity生命周期调用优先于Fragment,并且Fragment比Activity要轻量很多。 onAttach:Fragment与Activity的建立关联时调用,用于获得Activity传递的值 onCreate:视图创建之前调用 onCreateView:创建Fragment视图时调用 onActivityCreated:视图创建完成之后调用 onStart:界面视图显示状态下调用 onResume:界面视图有焦点的状态下调用 onDestroyView:在Fragment视图被移除时调用 onDestroy : 销毁时调用 onDetach : 当Fragment不再依附于Activity时调用 Fragment启动流程 Fragment创建时调用: onAttach——>onCreate——>onCreateView——>onActivityCreated——>onStart——>onResume Fragment不可见时调用: onPause——>onStop Fragment销毁时调用: onPause——>onStop——>onDestroyView——>onDestory——>onDetach 流程图 开发过程中需要注意,可能会常用到的方法

Android基础知识点(1)--Activity

让人想犯罪 __ 提交于 2020-01-11 13:46:20
一、信息 整理:yoyiyi(soleil雪寂) 创建时间:2019 年 6 月 25 日 修改时间:2020 年 1 月 11 日 校对:yoyiyi(soleil雪寂) 状态:更新中 字数:2875 字 仓库: Soleil-Notes 二、目录 1、Activity 生命周期 2、Activity 状态 3、Activity 四种启动模式以及使用场景 4、Activity、View、Window 之间的关系 5、Activity 之间的通讯方式 6、描述一下 Activity 栈 7、横竖屏切换时候 Activity 的生命周期 8、Activity 与 Fragment 之间的生命周期 9、Activity上有 Dialog 时候按 Home 键时生命周期 10、当 Activity 设置为透明主题时,按 Home 键,Dialog 闪烁如何解决 11、两个 Activity 跳转必然会执行那几个方法 12、如何启动其他应用的 Activity 13、Activity 状态保存和恢复 14、Activity 和 Service 如何绑定 15、下拉状态栏是不是影响 Activity 的生命周期 16、Activity 常用的标记位 Flags 17、如何将一个 Activity 设置成窗口的样式 18、Activity 的 startActivity 和 Context 的