实际上,如果要将现有 Android 应用转换为使用片段,可能只需将代码从 Activity 的回调方法移入片段相应的回调方法中。...管理Fragment 如要管理 Activity 中的片段,需使用 FragmentManager。如要获取它,请从 Activity 调用 getSupportFragmentManager()。...)获取 Activity 中存在的片段。...ViewPager对Fragment生命周期的影响 ViewPager+Fragment 是比较常见的组合了,一般搭配ViewPager的FragmentPagerAdapter 或 FragmentStatePagerAdapter...此时左右两个 Fragment 都会执行从 onAttach->….->onResume 的生命周期,明明 Fragment 没有显示却已经到onResume 了,在某些情况下会出现问题。
Fragment 概念 Android从3.0之后引入了Fragment,可以把它理解为页面的一个片段,比如一个html网页就包含一个header头部片段,以及一个body身体片段。...Fragment可以协助我们完成如下任务: 1、在一个页面中嵌入多个连续可翻页的子视图,方面使用ViewPager统一管理; 2、开发一些通用的小部件,内部封装好代码逻辑,可直接嵌入到任意页面。...对象构造而来,每个元素返回的又是已初始化的Fragment对象;最后对ViewPager设置该适配器,从而把ViewPager与多个Fragment页面关联起来。...这样,每次获取Fragment实例,都是调用newInstance方法获得,而不是调用它的构造函数。...导致状态丢失的情况有很多,其中一种是早期的Android可能在onStop之前就会结束Activity,后来从3.0开始只能在onStop之后才能结束Activity,这样早期Android如果在omPause
对于startActivity函数的调用很多文章都有介绍,可以简单参考下老罗的博客Android应用程序内部启动Activity过程(startActivity)的源代码分析,比如在Activity A...下面结合具体的系统View控件来分析一下这两个函数的具体应用:比如ViewPager与FragmentTabHost,这两个空间是主界面最常用的控件,内部对后台杀死做了兼容,这也是为什么被杀死后,Viewpager...ViewPager应对后台杀死做的兼容 首先看一下ViewPager做的兼容,ViewPager在后台杀死的情况下,仍然能恢复到上次关闭的位置,这也是对体验的一种优化,这其中的原理是什么?...= null) { mWindow.restoreHierarchyState(windowState); } } } 从代码可以看出,其实就是获取当时保存的窗口信息...从源码很容易看出,其实就是取出SavedState,并获取到异常杀死的时候的位置,以便后续的恢复, ViewPager.java @Override public void onRestoreInstanceState
如果要获取Activity对象,不建议调用getActivity(),而是在onAttach()中将Context对象强转为Activity对象。...解释如下: onAttach():Fragment和Activity相关联时调用。可以通过该方法获取Activity引用,还可以通过getArguments()获取参数。...并在Fragment合适的地方调用mListener.onItemClick("hello")将”hello”从Fragment传递给Activity。...FABridge 由于通过接口的方式从Fragment向Activity进行数据传递比较麻烦,需要在Fragment中定义interface,并让Activity实现该interface,FABridge...Activity向Fragment传递数据 Activity向Fragment传递数据比较简单,获取Fragment对象,并调用Fragment的方法即可,比如要将一个字符串传递给Fragment,则在
生命周期&方法解释 这儿重点要知道的是下面这两对各自之间的区别。...Activity的启动过程:由AMS对栈内的Activity状态进行同步管理 & 规定:新Activity启动前,栈顶的Activity必须先onPause(),才能启动新的Activity(执行onResume...应用场景:有一个专用主页面作为基础的app,这样的app现在市面上也非常普遍存在,就比如一个Activity中嵌入ViewPager+BottomNavigationBar制作成的一个主页面一样,ViewPager...举个例子来说,就像是从Activity A一个新闻列表中选取了一条新闻,那这个时候就需要跳转进入Activity B,而查询新闻的方式我们就假设是他的id那这个时候,就需要将这个id从Activity...另一种泄漏问题就可能会引起Activity的泄漏了,就是内部存在未运行完子线程,导致Activity不能被及时清理掉。
本文从为什么出现Fragment开始,介绍了Fragment相关的方方面面,包括Fragment的基本定义及使用、回退栈的内部实现、Fragment通信、DialogFragment、ViewPager...如果要获取Activity对象,不建议调用getActivity(),而是在onAttach()中将Context对象强转为Activity对象。...解释如下: onAttach():Fragment和Activity相关联时调用。可以通过该方法获取Activity引用,还可以通过getArguments()获取参数。...mListener.onItemClick("hello")将”hello”从Fragment传递给Activity。...FABridge 由于通过接口的方式从Fragment向Activity进行数据传递比较麻烦,需要在Fragment中定义interface,并让Activity实现该interface,FABridge
在Activity中使用非静态的内部类,并开启一个长时间运行的线程,因为内部类持有Activity的引用,会导致Activity本来可以被gc时却长期得不到回收 6.使用Handler处理消息前,Activity...声明handler为static类,这样内部类就不再持有外部类的引用了,就不会阻塞Activity的释放。...在Activity中尽量避免使用生命周期不受控制的非静态类型的内部类,可以使用静态类型的内部类加上弱引用的方式实现。 静态变量:不要直接或者间接引用Activity、Service等。...在从服务器获取到图片后,需要再在本地和内存中分别存一份,这样下次直接就可以从内存中直接获取了,这样就加快了显示的速度,提高了用户的体验。...ARGB保存,所以每个像素占用4个字节,很容易内存溢出 可以对图片的宽高和质量进行压缩 首先对图片进行缩放 获取屏幕宽高 //设置缩放比例 opts.inSampleSize
本文的主旨就是解释其 保存与还原内部的原理以及过程。...,其内部有一个 ViewPager,ViewPager 的适配器就是我们上面写的 MainAdapter,默认缓存 n(1)+2 。...Fragment 内部是一个 RecyclerView,其数据源来自 activity级 的ViewModel(即我们对数据根据key做了缓存,避免每次的重新初始化) 我们做一个滚动测试,然后再看看 Fragment...在初始化 Fragment 时,其会通过 下标position 从 mSavedState 找到缓存的 Fragment 状态,然后将设置给其,便于后续的使用。..." + position + ": f=" + fragment); // 数组健壮性保护 if (mSavedState.size() > position) { // 获取指定位置保存的状态
好,第二步,设计动画的梯度变化。 经过分析,我们总结出两个步骤,下面我们开始一步一步来打造~~~ 2、获取用户切换时当前View和切换至的目的View。...,然后滑动的时候,通过get(position)取出,比如上述效果,始终是右边的View变化,要么从小到大,要么从大到小 那么滑倒下一页:左边的View:map.get(position...0 : positionOffset; //获取左边的View mLeft = findViewFromObject(position); //获取右边的View mRight =...View,然后添加动画效果;当前这个例子添加了两个动画,一个是从0.5放大到1.0或者1.0缩小到0.5,没错由我们的positionOffset提供梯度的变化~~还有个平移的动画:下一页直接移动到当前屏幕...,最后附上一个我比较喜欢的效果:Tablet 最后,喜欢借此博客抛砖引玉~~大家对感兴趣的github上的代码,可以进行分析与自己尝试去实现,有时候会发现不是很难~你也可以做到~!
原因就是,其实Dialog是Activity的一个组件,此时Activity并不是不可见,而是被Dialog组件覆盖了其他的组件,此时我们无法对其他组件进行操作而已。...问题:onNewIntent()调用时机? singleTop:如果新Activity已经位于任务栈的栈顶,就不会重新创建,并回调 onNewIntent(intent) 方法。...HTTP协议是 基于TCP/IP通信协议来传输数据的,可以从服务器端获取图片等数据资源。...,当你再次访问前一个网络请求时,就可以直 接从代理服务器中获取,而不需要请求我们的web服务器】。...2)传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份; 3)使用时,header里携带的内容过大,增加了传输成本
支持Activity和Fragment页面测速,并解决ViewPager+Fragment延迟加载时测速不准的问题。 在Application的构造函数中开始冷启动时间计算。...据此,要测量的内容包括以下方面: 项目的冷启动时间:从App被创建,一直到我们首页初次绘制出来所经历的时间。...页面的初次渲染时间:从Activity或Fragment的 onCreate() 方法开始,一直到页面View的初次渲染完成所经历的时间。...递归调用时,由于标志位为false所以会调用原有逻辑,即获取根View。 获取根View后,包装为 AutoSpeedFrameLayout 返回。...,目前已经在项目中使用,并在监控平台上可以获取实时的数据。
在Activity中使用非静态的内部类,并开启一个长时间运行的线程,因为内部类持有Activity的引用,会导致Activity本来可以被gc时却长期得不到回收 6.使用Handler处理消息前,Activity...声明handler为static类,这样内部类就不再持有外部类的引用了,就不会阻塞Activity的释放。...在Activity中尽量避免使用生命周期不受控制的非静态类型的内部类,可以使用静态类型的内部类加上弱引用的方式实现。 静态变量:不要直接或者间接引用Activity、Service等。...在从服务器获取到图片后,需要再在本地和内存中分别存一份,这样下次直接就可以从内存中直接获取了,这样就加快了显示的速度,提高了用户的体验。...ARGB保存,所以每个像素占用4个字节,很容易内存溢出 可以对图片的宽高和质量进行压缩 首先对图片进行缩放 获取屏幕宽高 //设置缩放比例 opts.inSampleSize =
执行后的回调), –> onDetach()(当Fragment从Activity解除关联时被调用) ?...使用findFragmentById() (用于在activitylayout 中提供一个UI 的fragment)或findFragmentByTag()(适用于有或没有UI 的fragment)获取...activity 中存在的fragment 2....Fragment真正的onPause以及onResume Fragment虽然有onResume()和onPause()方法,但是这两个方法是Activity的方法调用时机也与Activity相同, 和...ViewPager搭配使用这个方法就很鸡肋了,根本不是你想要的效果,这里介绍一种方法。
此外,某些区域性的ViewPager(例如展示广告或者公告之类的ViewPager),可能需要自动轮播的效果,即用户在不用滑动的情况下就能够看到其他页面的信息。...Override public Object instantiateItem(ViewGroup container, int position) { //对ViewPager...但是,简单的求模会出现问题:考虑用户向左滑的情形,则position可能会出现负值。所以我们需要对负值再处理一次,使其落在正确的区间内。...实际上,实验表明这里如果加上了remove的调用,则会出现ViewPager的内容为空的情况。...,主要是加载View和对ViewPager进行初始化设置。
老样子,先上脑图: 我们就按照脑图的顺序一样样来看Fragment的基础知识。 正文: 1.Fragment的添加 我们知道Fragment是一个"碎片(或者片段)",添加在Activity中。...那么在Fragment内部中的Fragment的管理器,就需要使用getChildFragmentManager()来获取了。...方法存在的意义是对detach后的Fragment进行界面恢复。...); mContext = activity; } } 4.Fragment配合ViewPager ViewPager配合Fragment的时候,主要使用FragmentPagerAdapter...少量的Fragment情况,例如和TabLayout共同使用时。
我们就按照脑图的顺序一样样来看Fragment的基础知识。 ---- 正文: 1.Fragment的添加 ? 我们知道Fragment是一个"碎片(或者片段)",添加在Activity中。...那么在Fragment内部中的Fragment的管理器,就需要使用getChildFragmentManager()来获取了。 2.2 FragmentTransaction相关 ?...方法存在的意义是对detach后的Fragment进行界面恢复。...少量的Fragment情况,例如和TabLayout共同使用时。...所以我们比如一些对象可以保持在fragment中,这时候Activity重新恢复后,其他对象可以从fragment中找回。
ViewPager是一个常用的android组件,不过通常我们使用ViewPager的时候不能实现左右无限循环滑动,在滑到边界的时候会看到一个不能翻页的动画,可能影响用户体验。...此外,某些区域性的ViewPager(例如展示广告或者公告之类的ViewPager),可能需要自动轮播的效果,即用户在不用滑动的情况下就能够看到其他页面的信息。... } @Override public Object instantiateItem(ViewGroup container, int position) { //对ViewPager...但是,简单的求模会出现问题:考虑用户向左滑的情形,则position可能会出现负值。所以我们需要对负值再处理一次,使其落在正确的区间内。...,主要是加载View和对ViewPager进行初始化设置。
--- Fragment --> Activity --- Fragment --> Fragment 3.Fragment和ViewPager的结合以及懒加载的实现 4.Fragment...的爱恨情仇 1.最简单的Fragment + ViewPager ?...打开时 isVisibleToUser 出现了,而且是最先调用的,一开始是红色 isVisibleToUser= true 总的来说就是生成了红色和黄色两个Fragment并对两者其进行了初始化...(但Fragment还是会创建的) private boolean initialization; // 界面是否已初始化完毕 private boolean isVisibleToUser; // 是否对用户可见...[1].将整个界面的责任碎片化,分散到各个部分,缓解Activity的负担 [2].方便修改/更新:那个地方出现问题/需要更新界面样式,可以直接去找对应的Fragment,而不是像以前在Activity
的时候回调这个方法,并且只调用一次 @Override public void onAttach(Activity activity){ super.onAttach(activity); }...Fragment是通过调用getActivity()的方法获取Activity的; Activity是通过调用FragmentManager的findFramentById()的,也可以用findFragmentByTag...()方法获取Fragment片段的。...>ViewPager> ViewPager是一种容器,可以盛装两种类型的对象:一种是View对象; 也可以放置Fragment。...的声明:ViewPager> 是为了解决版本兼容性问题 过程 我们创建好布局文件,然后在MainActivity中添加,进行实例 准备数据源 private
的时候回调这个方法,并且只调用一次 @Override public void onAttach(Activity activity){ super.onAttach(activity); }...Fragment是通过调用getActivity()的方法获取Activity的; Activity是通过调用FragmentManager的findFramentById()的,也可以用findFragmentByTag...()方法获取Fragment片段的。...android:...> ViewPager> ViewPager是一种容器,可以盛装两种类型的对象:一种是View对象; 也可以放置Fragment...的声明:ViewPager> 是为了解决版本兼容性问题 过程 我们创建好布局文件,然后在MainActivity中添加,进行实例 准备数据源 private
领取专属 10元无门槛券
手把手带您无忧上云