gpt4 book ai didi

android - 如何在后台从 Android 调用 Dart

转载 作者:行者123 更新时间:2023-12-03 02:48:37 25 4
gpt4 key购买 nike

当 Activity 处于后台或根本没有 Activity 时,我试图从 Android 调用 Dart 代码。例如,当 alarmmanager 触发时。

这是我的 Dart 代码:

void main() async {
WidgetsFlutterBinding.ensureInitialized();

runApp(MyApp());

const MethodChannel _kChannel =
MethodChannel('mychannel');
_kChannel.setMethodCallHandler((call) {
if (call.method == 'method1') {
return ...;
}
if (call.method == 'method2') {
return ...;
}
return Future.value();
});
}

来自 Java:

Application.channel.invokeMethod(method, arguments, new MethodChannel.Result() {...});

channel 是一个从我的 mainactivity 初始化的静态变量。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);

Application.channel = new MethodChannel(getFlutterView(), CHANNEL_ID);
}

这在 Activity 位于前台时有效。但是当它在后台时,我收到以下通知:FlutterView.send called on a detached view, channel=mychannel

调用没有被执行。如何在后台从 Android 调用 Dart?

编辑:

我的用例是一个纯 Android 用例。这基本上是流程:

  1. 警报管理器触发并接收到广播事件。 Dit 是在没有库的情况下完成的。这主要发生在应用未处于 Activity 状态时。
  2. 在 broadcastreceiver 中,从 Firebase 读取一些数据并设置通知。
  3. 根据来自 Firebase 的数据安排新的警报。

在 flutter/dart 中,我已经有了从 Firebase 获取数据的业务逻辑。显然我不想再写所有这些,但现在用 Java。

我不想使用 alarmmanager 插件和本地通知插件,因为它们在不同的隔离区中运行会导致问题。

最佳答案

这个问题的答案有点棘手。首先,您想从后台执行什么?您是否在特定时间或以定义的时间间隔运行后台服务或安排任何作业?

如果你想安排一个后台作业或周期性任务,你想经常执行,你可以看看https://pub.dev/packages/workmanager插件,可让您安排后台作业并让您在 Activity 不活动时从后台执行 dart 代码。

如果您想在原生代码中构建自己的后台服务:Android/iOS,并希望从中调用 dart 代码,您应该阅读以下文章:

The Tricky Task of Keeping Flutter Running

The Tricky Task of Keeping Flutter Running (Vol. 2)

我必须说,从本地后台服务运行dart代码并不是一件简单的事情,你肯定需要挠头才能实现你想要的。

另外,请记住 Android 和 iOS 的后台执行限制。一旦您熟练掌握了这一点,那就是另一个需要深入研究的主题。

关于android - 如何在后台从 Android 调用 Dart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63782877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com