Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在后台从Android调用Dart_Android_Flutter_Dart_Flutter Method Channel - Fatal编程技术网

如何在后台从Android调用Dart

如何在后台从Android调用Dart,android,flutter,dart,flutter-method-channel,Android,Flutter,Dart,Flutter Method Channel,我试图在活动处于de后台或根本没有活动时从Android调用Dart代码。例如,当alarmmanager已触发时 这是我的dart代码: void main() async { WidgetsFlutterBinding.ensureInitialized(); runApp(MyApp()); const MethodChannel _kChannel = MethodChannel('mychannel'); _kChannel.setMethodCallH

我试图在活动处于de后台或根本没有活动时从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);
}
当活动位于前台时,此操作有效。但当它在后台时,我收到以下通知:
flatterview.send在分离视图上调用,channel=mychannel

无法执行该调用。如何在后台从Android调用Dart

编辑

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

  • alarmmanager激发并接收广播事件。Dit是在没有库的情况下以本机方式完成的。这通常发生在应用程序未处于活动状态时
  • 在broadcastreceiver中,从Firebase读取一些数据并设置通知
  • 根据Firebase的数据安排新警报
  • 在flutter/dart中,我已经获得了从Firebase获取数据的业务逻辑。显然,我不想再写这些东西了,但现在用Java


    我不想使用alarmmanager插件和local Notifications插件,因为这两个插件在不同的隔离区中运行,会造成麻烦。

    ViewModel的范围比活动生命周期更大。您可以从ViewModel类方法内部而不是从活动中调用颤振代码

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

    如果你想安排一个backgorund作业或一个周期性任务,你想经常执行,你可以看看这个插件,它可以让你安排后台作业,并让你在活动不活动时从后台执行dart代码

    如果您想用本机代码(Android/iOS)构建自己的后台服务,并想从中调用dart代码,您应该阅读以下文章:

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


    另外,请记住Android和iOS的后台执行限制。一旦你熟悉了这一点,这是另一个需要深入研究的话题。

    你读过:@MorrisonChang是的,我读过,但对我来说,为它创建一个专用插件似乎需要很大的开销。Flatter是安卓系统之上的另一个引擎/层。当Android活动不再在前台时,由于出现问题而暂停这些活动。即使对于本机Java/Kotlin应用程序,由于电池节省措施(如检查此项是否有帮助)而一直在改变,以在后台继续运行所需的功能这并不能提供问题的答案。一旦你有足够的钱,你将能够;相反-