如何在 flutter android 插件包中处理 android 生命周期

How to handle android lifecycle in flutter android plugin package

我需要知道 android 插件包中 flutter 应用视图的当前状态。

目前,我使用 https://docs.flutter.io/flutter/widgets/WidgetsBindingObserver-class.html 观察 flutter 视图中的状态,然后将其传递给我的插件。

因为这有时看起来并不完美(第一个事件未传递 Android)我想直接从 android 插件获取状态。

在插件中我得到了注册器并且可以 activity,但是我如何观察它的状态?

Flutter 不为这些生命周期事件提供钩子。

Android Jetpack(以前称为架构组件)添加了一种从 activity:

接收生命周期事件的好方法

Handling Lifecycles with Lifecycle-Aware Components

缺点:它仅在 activity 是 AppCompatActivity 时有效。 Flutter 应用程序通常基于简单的 Activity,因此您必须告诉您的用户改用 AppCompatActivity

在 android 插件中添加了对生命周期回调的支持。请refer

public class MyPlugin implements FlutterPlugin, ActivityAware {
  //...normal plugin behavior is hidden...

  @Override
  public void onAttachedToActivity(ActivityPluginBinding activityPluginBinding) {
    // TODO: your plugin is now attached to an Activity
  }

  @Override
  public void onDetachedFromActivityForConfigChanges() {
    // TODO: the Activity your plugin was attached to was
    // destroyed to change configuration.
    // This call will be followed by onReattachedToActivityForConfigChanges().
  }

  @Override
  public void onReattachedToActivityForConfigChanges(ActivityPluginBinding activityPluginBinding) {
    // TODO: your plugin is now attached to a new Activity
    // after a configuration change.
  }

  @Override
  public void onDetachedFromActivity() {
    // TODO: your plugin is no longer associated with an Activity.
    // Clean up references.
  }
}

Kotlin 版本

在您的插件代码中:

class MyFlutterPlugin: FlutterPlugin, MethodCallHandler, ActivityAware {

/// onAttachedToEngine, onMethod call was hidden due to irrelevance in this example

    override fun onAttachedToActivity(binding: ActivityPluginBinding) {
        (binding.lifecycle as HiddenLifecycleReference)
                .lifecycle
                .addObserver(LifecycleEventObserver { source, event ->
                    Log.e("Activity state: ", event.toString())
                })

    }
}

不要忘记在

中取消注册并重新附加观察者

onDetachedFromActivity

onReattachedToActivityForConfigChanges

onDetachedFromActivityForConfigChanges

方法