我希望能够知道用户何时可以实际看到我的窗口小部件/片段中的内容(而不仅仅知道窗口小部件是在折叠下方呈现的,还是在缓存的片段中呈现但实际上可能永远不会得到显示)。
我已经搜索了某种钩子的高低,让你知道什么时候在屏幕上显示,但找不到。这样的事情是存在的,还是这个Android被忽视的东西?是否有可能以某种方式将其拼凑在一起,或者我只是运气不好?
谢谢!
答案 0 :(得分:0)
来自Activity
类的文档:
活动的整个生命周期发生在第一次调用onCreate(Bundle)到最后一次调用onDestroy()之间。活动将在onCreate()中完成所有“全局”状态设置,并释放onDestroy()中的所有剩余资源。例如,如果它有一个在后台运行的线程从网络下载数据,它可以在onCreate()中创建该线程,然后在onDestroy()中停止该线程。
活动的可见生命周期发生在对onStart()的调用之间,直到对onStop()的相应调用。在此期间,用户可以在屏幕上看到活动,尽管它可能不在前台并与用户交互。在这两种方法之间,您可以维护向用户显示活动所需的资源。例如,您可以在onStart()中注册BroadcastReceiver以监视影响UI的更改,并在用户不再看到您正在显示的内容时在onStop()中取消注册。 onStart()和onStop()方法可以多次调用,因为活动对用户来说是可见的和隐藏的。
活动的前景生命周期发生在对onResume()的调用之间,直到对onPause()的相应调用。在此期间,活动位于所有其他活动之前并与用户交互。活动可以经常在恢复和暂停状态之间进行 - 例如,当设备进入休眠状态,交付活动结果时,交付新意图时 - 因此这些方法中的代码应该相当轻量级。 p>
第二点和第三点似乎清楚地提到了你要找的东西(onResume()
方法)。如果您使用的是片段,则适用相同的规则。片段的onResume()
方法将在活动的onResume()
之后调用。
http://developer.android.com/reference/android/app/Activity.html http://developer.android.com/reference/android/app/Fragment.html#Lifecycle
编辑:
好吧,显然没有直接解决方案。我有一个想法,但更多的是即兴创作,而不是一个正确的解决方案。此外,它可能或可能不起作用。试试这些 -
ViewPager
(带标签)中使用片段,则FragmentPagerAdapter
会在当前显示的片段上调用setUserVisibilityHint(true)
。您可以在片段中使用getUserVisibilityHint()
进行检查。ScrollView
作为容器,也许您可以侦听滚动更改并确定您的片段是可见还是向外滚动。有关详细信息,请参阅this answer。View.isVisible()
检查其可见性。这些选项都没有提供明确的基于事件的机制来检查可见性,但也许您可以以某种方式使用它们。一种方法是定义自己的回调,并覆盖上述方法来调用它们。如果您使用这些方法(或其他方法),请告诉我。