簡體   English   中英

有沒有更好的方法來了解活動的生命周期狀態,例如isOnStop,isOnPause之類的API?

[英]Is there a better way to know the Activity's Life-cycle states, API like isOnStop, isOnPause?

我有很多變量,例如isOnPauseisOnStop等。當Activity調用onStop() ,我讓isOnStop = true ,我想知道是否存在像this.isOnPause(), this.isOnStop()這樣的官方方法?

我檢查了Activity的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()這樣的官方方法?

擴展FragmentActivityAppCompatActivity ,可以使用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)

根據您的帖子,您似乎希望其他組件根據生命周期狀態執行某些代碼,而不是直接將這些代碼直接放在Activity / Fragment生命周期回調中? 那么,您是否正在尋找一種方法來告訴另一個組件特定生命周期所有者的狀態,以便另一個組件可以對它進行操作?

如果是這樣,那么使另一個類或組件了解生命周期所有者的生命周期狀態的另一種方法是實現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

不,我認為Android平台不會公開任何API來明確知道何時“停止”或“暫停”了Activity。 如果確實需要它 ,則需要跟蹤

我從來沒有發現需要跟蹤活動(或片段的生命周期)的需求,至少不是以這種方式。 我只是對這些事件做出相應的回應。 您可以采用的方法因您的情況而異。

  1. 當活動引用的對象僅在活動位於前台且對用戶可見時才有用時,請使用onResumeonPause

  2. 當即使活動在后台也需要該對象時,您可以“假定”該對象可以被垃圾回收,將其放置在onDestroy ,因為即使永不調用onDestroy ,系統也會要求該對象使用的內存。 同樣,假設它可以被垃圾收集

  3. 如果對象不能被垃圾回收。 然后,您可以通過實現LifecycleObserver接口使它具有生命周期意識。 Android開發人員指南中的更多信息

  4. 您還可以將活動作為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()確定活動的當前狀態

您可以在android Activity生命周期中看到onPause()和onStop()重寫方法。

在這里你可以看到它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM