我有很多变量,比如isOnPause,isOnStop等等。当活动名为onStop()时,我让isOnStop = true,我想知道是否存在像this.isOnPause(), this.isOnStop()这样的官方方法?
我已经检查了API引用的活动,只看到isDestroyed(),但没有isStoped(), isPaused()。
protect final void onStop(){
isOnStop = true // I don't think this is good way to do this.
}所以,我想知道是否存在像this.isOnPause(), this.isOnStop()这样的官方方法
发布于 2019-08-02 03:00:35
在扩展FragmentActivity或AppCompatActivity时,可以使用getLifecycle().getCurrentState()访问当前的生命周期状态。这将返回一个Lifecycle.State枚举值,它有一个isAtLeast()方法,允许您编写如下代码
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)发布于 2019-08-02 04:05:42
根据您的文章,您似乎希望其他组件基于生命周期状态执行一些代码,而不是直接将该代码放在活动/片段生命周期回调中?那么,您是否正在寻找一种方法来告诉另一个组件特定生命周期所有者的状态,以便另一个组件可以对其进行操作?
如果是这样,那么让另一个类或组件知道生命周期所有者的生命周期状态的另一个方法就是实现LifecycleObserver。然后,可以将实现接口的类注册为生命周期所有者的观察者。
public class ConnectionListener implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void connectListener() {
...
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void disconnectListener() {
...
}
}然后,您可以将该类注册为生命周期所有者的观察者,例如活动或片段。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//..
getLifecycle().addObserver(new ConnectionListener());
}这是它的官方文档:https://developer.android.com/topic/libraries/architecture/lifecycle#java
发布于 2019-08-02 03:00:09
不,我不认为Android平台公开任何API来显式地知道某个活动何时“停止”或“暂停”。如果您真的需要它,,,您需要跟踪它。
我从未发现需要跟踪活动的生命周期(或片段的生命周期),至少没有这样做。我只是对这些事件作出相应的反应。根据你的情况,你可以采取不同的方法。
onResume和onPause。onDestroy中“释放”该对象,假设该对象可以被垃圾收集,因为即使onDestroy从未被调用,系统也会声明该对象所使用的内存。同样地,假设它可以被垃圾收集。LifecycleObserver接口使其具有生命周期感知。关于Android开发者指南的更多信息WeakReference传递给需要与活动交互的对象,并始终检查isEnqueued并确保get不返回空值。见下文..。
if(activityReference?.get() == null || activityReference?.isEnqueued == true){
//The activity has either been garbage-collected or is enqueued for garbage collection
}编辑:根据ianhanniballake的答案,您可以使用getLifecycle().getCurrentState()来确定活动的当前状态
https://stackoverflow.com/questions/57319149
复制相似问题