【问题标题】:How to handle android lifecycle in flutter android plugin package如何在flutter android插件包中处理android生命周期
【发布时间】:2018-12-21 11:13:24
【问题描述】:

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

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

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

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

【问题讨论】:

标签: android flutter android-lifecycle


【解决方案1】:

在 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.
  }
}

【讨论】:

    【解决方案2】:

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

    Android Jetpack(以前的架构组件)添加了一种从 Activity 接收生命周期事件的好方法:

    Handling Lifecycles with Lifecycle-Aware Components

    缺点:仅当活动为AppCompatActivity 时才有效。 Flutter 应用程序通常基于简单的Activity,因此您必须告诉您的用户改用AppCompatActivity

    【讨论】:

    • 好的,谢谢你的建议。所以我必须坚持我的方法或 AppCompatActivity。
    【解决方案3】:

    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

    方法

    【讨论】:

      猜你喜欢
      • 2019-02-02
      • 1970-01-01
      • 2019-11-20
      • 2022-12-14
      • 2013-05-19
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      相关资源
      最近更新 更多