首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

什么是线程组,为什么 Java 推荐使用

在线程组,如果发生未捕获异常,可以通过 Thread.UncaughtExceptionHandler 进行处理。 Java ,虽然线程组是一种功能强大的机制,但实际上并不推荐使用。...下面主要从以下几个方面说明: 1、难以扩展 平常的开发,当我们需要对线程进行动态调度,线程组往往过于笨重,这导致了代码难以扩展。...3、容易引起歧义 Java ,虽然 ThreadGroup 的设计旨在通过将一组线程分到同一个容器来轻松管理和控制它们,但如果使用错误,可能会导致线程状态。...比如,当您关闭 ThreadGroup ,尽管所有子线程仍在运行,您还是可以结束整个应用程序。...因此, Java ,线程组已基本过时,推荐使用 Executor 框架等新的更实用的工具来进行线程管理。

24820

Java 为什么推荐 while 循环中使用 sleep()

前言最近逛 CSDN 看到一篇文章,文章大意是说为什么循环中推荐使用 sleep 操作,原因在于线程挂起和唤醒会有很大的性能消耗,并推荐使用 Timer 及 ScheduledExecutorService...比如微服务体系,客户端上报实例状态,或者服务端检测客户端状态都会使用定时轮询的机制。...事件机制上文的场景,我更推荐事件机制进行解耦,当变量被改变,发送变量修改事件进行处理,如常见的 Spring Event 或者其它事件推送框架。...比如一些用户登录场景,当用户登录状态改变,发送登录事件进行后续处理,比如登录通知等等等待和唤醒等待和唤醒机制一般适用于等待时间较长的场景,因为等待和唤醒是一个性能消耗比较大的操作;等待时间不是很长的场景可以使用轮询机制... Java AQS 等待获取锁和线程池任务为空等待新任务,会使用等待和唤醒操作轮询机制 和 等待和唤醒 一般会结合使用,避免线程频繁的挂起和唤醒。

67230
您找到你想要的搜索结果了吗?
是的
没有找到

Fragment 可见性监听方案 - 完美兼容多种 case

开发当中, fragment 经常使用到。很多应用场景,我们需要监听到 fragment 的显示与隐藏,来进行一些操作。比如,统计页面的停留时长,页面隐藏的时候停止播放视频。...(boolean isVisibleToUser) 有一点需要注意的是,个方法可能先于Fragment的生命周期被调用(FragmentPagerAdapterFragment被add之前这个方法就被调用了...的适配(也是一个坑) AndroidX 当中,FragmentAdapter 和 FragmentStatePagerAdapter 的构造方法,添加一个 behavior 参数实现的。...宿主Fragment在生命周期执行的时候会相应的分发到子Fragment,但是setUserVisibleHint和onHiddenChanged却没有进行相应的回调。...Obsever 会有下游 Observer 的引用,从而进行一些转换操作,比如 map,FlatMap 操作符 如果你使用遇到坑,也欢迎随时 call 我,我们一起解决。

2.4K10

Android面试题避坑:ViewPager的Framgent如何实现懒加载?

当被问到上述问题,很多人可能首先会想到借助setUserVisiblity实现 如下,当Fragment可见时调用 onVisible 从而实现异步加载 @Override public void setUserVisibleHint...AndroidX 自 1.1.0-alpha07 起, 为 FragmentTransaction 增加了新的方法 setMaxLifeCycle, 官方建议开发者以此取代setUserVisibleHint...,这将带来如下好处: 基于 Lifecycle 的懒加载更加科学,可以配合 Livedata 等组件MVVM架构中使用 setMaxLifeCycle 无需额外定义 Fragment 基类,使用起来更加无侵...,会通过setMaxLifecycle 来限制 Fragment 的生命周期:只有当 Fragment 显示屏幕才执行onResume()。...这样就可以把加载数据等处理放在 onResume() 从而实现懒加载了。

89260

Fragment新功能,setMaxLifecycle了解一下

一直都是无法直接设置生命周期,必须通过add、attach、remove、detach、show、hide方法间接干预,本来就此功能,简单介绍一下setMaxLifecycle的原理和上手效果; 阅读指南: 本文基于androidx...setMaxLifecycle可以单独使用,也可以配合add等方法组合使用,首先,我们分析单独执行add命令的状态变化: 单独执行add操作 FragmentTransaction fragmentTransaction...方法,所以FragmentPagerAdapter也进行了适配 FragmentPagerAdapter public static final int BEHAVIOR_SET_USER_VISIBLE_HINT...setUserVisibleHint来控制Fragment懒加载,最新版的FragmentPagerAdapter里有新思路,可以切换到BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT...setMaxLifecycle能进一步的控制Fragment生命周期,一句话形容就是对add、attach等命令的补充; 其次该功能在官方控件得以运用,改善了ViewPager+Fragment的使用体验

2.5K40

Android基础:Fragment,看这篇就够了 ( 下 )

support v13和support v4都提供了FragmentPagerAdapter和FragmentStatePagerAdapter,区别在于:support v13使用android.app.Fragment...一般都使用support v4的FragmentPagerAdapter和FragmentStatePagerAdapter。...界面变为可见,调用setUserVisibleHint(true)。 界面变为不可见,调用setUserVisibleHint(false)。...因为setUserVisibleHint(true)界面可见都会调用,如果滑到该界面做过数据加载后,滑走,再滑回来,还是会调用setUserVisibleHint(true),此时由于mIsInited...lazyLoad():懒加载的核心类,该方法,只有界面可见(getUserVisibleHint()==true)、UI准备好(mIsPrepared==true)、过去没做过数据加载(mIsInited

1.9K00

Android多种设计下实现懒加载机制的方法

1.1遇到的问题 我们平时开发,经常使用 ViewPager+Fragment 的组合来实现左右滑动的页面设计(如上图),但是 ViewPger 有个 预加载 机制,默认会把 ViewPager 当前位置的左右相邻页面预先初始化...首先 setUserVisibleHint(boolean isVisibleToUser) 方法是必须调用的,即当 Fragment 由可见变为不可见和不可见变为可见回调。...对于第一个 Fragment ,如果 setUserVisibleHint(boolean isVisibleToUser ) 方法 onCreateView() 之前调用的话,如果懒加载方法只 setUserVisibleHint...思来想去, onActivityCreated() 方法是最合适的。我们继承的时候, onViewCreated() 方法中进行一些初始化就行了,这样不会引起冲突。...②demo使用的是 ViewPager+Tablayout 的组合方式,使用 Tablayout 一定要保证 styles.xml 的主题应该使用 Theme.AppCompat.Light.NoActionBar

1.2K30

Android优化方案之Fragment的懒加载实现代码

一、背景 Android应用,ViewPager是我们不可避免使用的一个控件,因为它可以使我们占用较少空间的同时,增强内容的丰富性,同时以其内部流淌着Google的血液,所以它几乎成了每一个App...但是,假如ViewPager的每一个Fragment都需要通过网络拉取数据加载,而ViewPager是默认加载前两项的,所以很容易造成网络丢包或者网络堵塞等问题,所以Fragment使用懒加载是非常有必要的...public void setUserVisibleHint(boolean isVisibleToUser) 当我们setUserVisibleHint方法中进行Log输出,我们可以看到: ?...所以我们可以重写setUserVisibleHint方法,然后可见进行网络加载数据: @Override public void setUserVisibleHint(boolean isVisibleToUser...由第二部分我们可以知道,setUserVisibleHint(boolean isVisibleToUser)方法是比onCreate更早调用的,但是我们一般加载数据,都会在数据加载完成进行UI

49020

TabLayout+ViewPager+Fragment实现切页展示「建议收藏」

就是被动加载,当Fragment页面可见,才从网络加载数据并显示出来。那什么时候Fragment可见呢?...= false; //不可见 boolean mIsFirstLoad = true; //第一次加载 当然onCreateView确保了View已经准备好,将mPrepare置为true,setUserVisibleHint...= false; } private void loadData() { //这里进行网络请求和数据装载 } 当然,最后,如果Fragment销毁的话...Google为了避免用户因翻页而造成卡顿,采用了缓存的形式,但是其实缓缓存,只要该Fragment会显示,都会进行Fragment创建,都会耗费相应的时间,换言之,缓存只不过将本应该在翻页的卡顿集中启动该...但是这样的做法,最大的缺点就是容易造成第一次启动非常缓慢!如果第一次启动时间满足要求的话,就使用这种简单地办法吧。

2.1K10

Android Fragment懒加载新思路

Android x以前,我们实现懒加载通常是通过 setUserVisibleHint 方法来控制Fragment是否可见。Android x之后,Google 提供了新的方案给我们。...所以Android x里面,Google推荐我们使用 setMaxLifecycle....,至于它们是干什么的,我们具体继续往下看:当然结合我们开始的Demo,从注释也能看出端倪。...我们来看里面的逻辑,默认会使用 Lifecycle.State.RESUMED,也就是说默认会执行生命周期方法到onResume,并且代替了 setUserVisibleHint(true) 方法,而它的作用是用来通知...测试demo:ViewPager-Fragment1-Fragment2 打开Activity: 当切换到第二个Fragment: 可以观察到每次都会执行onResume,所以我们可以将我们的数据加载方法放在

52540

【Android】再来一篇Fragment的懒加载(只加载一次哦)

稍微讲解一下,有些时候,我们打开一个 Fragment 页面,希望它是可见才去加载数据,也就是不要在后台就开始加载数据,而且,我们也希望加载数据的操作只是第一次打开该 Fragment 才进行的操作...所以我们通常需要在 setUserVisibleHint() 里去判断当前 Fragment 是否可见,可见再去下载数据,但是这样还是会出现一个问题,就是每次可见都会重复去下载数据,我们希望的是只有第一次可见才需要去下载...即使我们 setUserVisibleHint() 做了很多判断,实现了可见加载并且只有第一次可见才加载,可能还是会遇到其他问题。...首次可见回调,可在这里进行加载数据,保证只第一次打开Fragment才会加载数据, * 这样就可以防止每次进入都重复加载数据 * 该方法会在 onFragmentVisibleChange...如果出现切换回来或不相邻的Tab切换导致空白界面的问题,解决方法: onCreateView复用布局 + ViewPager 的适配器复写 destroyItem() 方法去掉 super。

1.6K70

Android开发笔记(一百三十九)可定制可滑动的标签栏

剩下的FragmentActivity方式,布局文件只需声明一个FragmentTabHost,然后代码为该Host控件调用addTab方法逐个添加标签页,所以正好用来个性化定制标签页。...区分两种来源倒也不难,通过重写setUserVisibleHint方法即可,因为ViewPager来源的Fragment每次呈现界面都会调用setUserVisibleHint方法,而FragmentTabHost...(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); //只ViewPager显示提示对话框 if...(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); //只ViewPager显示提示对话框 if...->onCreateView,显然开发者setUserVisibleHint方法中弹窗,App还没来得及onCreateView方法给mContext赋值;所以要想正常使用setUserVisibleHint

1.6K20

Android模仿微博的LazyFragment懒加载

源码中有两个方法可以使用 viewpager和fragment模式使用的 public void setUserVisibleHint(boolean isVisibleToUser) {} 和...Fragment的loadData调用接口获取数据,然后给控件赋值 [2cd7168gr0.png?...因为进入appsetUserVisibleHint在生命周期前面,Fragment都没有加载布局,当然为null啦 [oh4iv5ex2p.png?...这个问题很简单,我们只需要在分发加载数据的事件,判断一下是否有父Fragment,且是否可见。就可以了 根据Fragment源码的这个方法,可以解决上面的问题 [v4fjhcpvdu.png?...从一开始我们可以看到,进入HomeFragment,子Fragment也会分别调用两次setUserVisibleHint方法,进入前就把自己的可见状态置为true。到底后面的分发事件无效了。

40610

ViewPager懒加载的实现,理解setUserVisibleHint,而不只是会用就好

但我们有时候的需求是需要当滑动到相应页面后再去更新数据,比如网络请求这种,可能你会说,那直接在onResumel里请求数据不就行了,但是ViewPager预加载机制在你处于前一个页面,已经加载好了下一个页面...当然你也可以将所有页面全部缓存,但这样所消耗的内存不言而喻,而且如果数据过多,第一次进去的时候的速度不可估量。所以这次我们使用懒加载来实现我们的需求。...getSupportFragmentManager(),list); viewPager.setAdapter(adApter); } } 查看一下Log的打印 可以看到我们切换到第二个页面...为什么第一次进来执行 F1可见呢?...我们onActivityCreated处打印Log,然后 setUserVisibleHint处也打印一句Log,观察结果: 这是因为setUserVisibleHint Fragment

76720

【Android】Fragment懒加载和ViewPager的坑

效果图 ANDROID和福利两个Fragment是设置的Fragment可见加载数据,也就是懒加载。...当你去网上查找相关资料,你会发现很多人推荐说把加载数据的操作放在这个函数里,isVisibleToUser表示当前Fragment是否可见。那么,是否真的可以就这样做呢?先来看个日志: ?...那么,是否可以setUserVisibleHint(boolean isVisibleToUser)里进行数据加载操作来实现懒加载呢?...可以是可以,如果你只是需要数据的懒加载的话,但如果你还有以下的需求,那么这种方式就不行了: 1、如果你Fragment可见需要进行一些控件的操作,比如显示加载控件 2、如果你还需要在Fragment...(boolean)}一致 * 该回调方法你可以做一些加载数据操作,甚至是控件的操作,因为配合fragment的view复用机制,你不用担心在对控件操作中会报 null 异常 *

1.6K20
领券