如何在 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
方法
我需要知道 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
方法