首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有更好的方法来了解活动的生命周期状态,比如isOnStop、isOnPause?

是否有更好的方法来了解活动的生命周期状态,比如isOnStop、isOnPause?
EN

Stack Overflow用户
提问于 2019-08-02 02:22:31
回答 4查看 860关注 0票数 0

我有很多变量,比如isOnPauseisOnStop等等。当活动名为onStop()时,我让isOnStop = true,我想知道是否存在像this.isOnPause(), this.isOnStop()这样的官方方法?

我已经检查了API引用的活动,只看到isDestroyed(),但没有isStoped(), isPaused()

代码语言:javascript
运行
复制
protect final void onStop(){
    isOnStop = true // I don't think this is good way to do this.
}

所以,我想知道是否存在像this.isOnPause(), this.isOnStop()这样的官方方法

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-08-02 03:00:35

在扩展FragmentActivityAppCompatActivity时,可以使用getLifecycle().getCurrentState()访问当前的生命周期状态。这将返回一个Lifecycle.State枚举值,它有一个isAtLeast()方法,允许您编写如下代码

代码语言:javascript
运行
复制
Lifecycle.State state = getLifecycle().getCurrentState();
// The state could be either STARTED or RESUMED
boolean isStarted = state.isAtLeast(Lifecycle.State.STARTED)

// Paused means we aren't resumed
boolean isPaused = !state.isAtLeast(Lifecycle.State.RESUMED)
票数 5
EN

Stack Overflow用户

发布于 2019-08-02 04:05:42

根据您的文章,您似乎希望其他组件基于生命周期状态执行一些代码,而不是直接将该代码放在活动/片段生命周期回调中?那么,您是否正在寻找一种方法来告诉另一个组件特定生命周期所有者的状态,以便另一个组件可以对其进行操作?

如果是这样,那么让另一个类或组件知道生命周期所有者的生命周期状态的另一个方法就是实现LifecycleObserver。然后,可以将实现接口的类注册为生命周期所有者的观察者。

代码语言:javascript
运行
复制
public class ConnectionListener implements LifecycleObserver {
   @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
   public void connectListener() {
       ...
   }

   @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
   public void disconnectListener() {
       ...
   }
}

然后,您可以将该类注册为生命周期所有者的观察者,例如活动或片段。

代码语言:javascript
运行
复制
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //..
    getLifecycle().addObserver(new ConnectionListener());

}

这是它的官方文档:https://developer.android.com/topic/libraries/architecture/lifecycle#java

票数 2
EN

Stack Overflow用户

发布于 2019-08-02 03:00:09

不,我不认为Android平台公开任何API来显式地知道某个活动何时“停止”或“暂停”。如果您真的需要它,,您需要跟踪它。

我从未发现需要跟踪活动的生命周期(或片段的生命周期),至少没有这样做。我只是对这些事件作出相应的反应。根据你的情况,你可以采取不同的方法。

  1. 当活动引用的对象只有在活动位于前台并对用户可见时才有用时,则使用onResumeonPause
  2. 当您需要该对象时,即使活动在后台,您也可以在onDestroy中“释放”该对象,假设该对象可以被垃圾收集,因为即使onDestroy从未被调用,系统也会声明该对象所使用的内存。同样地,假设它可以被垃圾收集。
  3. 如果对象不能被垃圾收集。然后,您可以通过实现LifecycleObserver接口使其具有生命周期感知。关于Android开发者指南的更多信息
  4. 您还可以将活动作为WeakReference传递给需要与活动交互的对象,并始终检查isEnqueued并确保get不返回空值。

见下文..。

代码语言:javascript
运行
复制
if(activityReference?.get() == null || activityReference?.isEnqueued == true){
    //The activity has either been garbage-collected or is enqueued for garbage collection
}

编辑:根据ianhanniballake的答案,您可以使用getLifecycle().getCurrentState()来确定活动的当前状态

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57319149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档