You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中Android应用进入最近应用列表时触发哪个生命周期方法?Android12异常

Flutter Android进入最近应用列表的生命周期问题

在Android 12及以上系统中,应用进入最近应用列表(概览界面)时,Flutter默认的didChangeAppLifecycleState回调不会触发AppLifecycleState.inactive或AppLifecycleState.paused——这是因为Android 12调整了应用状态判定:进入最近应用列表时,应用仍处于前台可见状态(仅被概览界面遮挡),并未真正进入后台,所以Flutter的生命周期回调不会触发对应状态变更。

要实现进入最近应用列表时的状态监听,需要结合Android原生的窗口焦点回调,通过MethodChannel桥接Flutter层:

实现步骤

1. Android原生层添加窗口焦点监听

在MainActivity.kt中重写onWindowFocusChanged方法,通过MethodChannel向Flutter层传递焦点状态:

import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel

class MainActivity : FlutterActivity() {
    private val CHANNEL = "app_lifecycle"

    override fun onWindowFocusChanged(hasFocus: Boolean) {
        super.onWindowFocusChanged(hasFocus)
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
            .invokeMethod("onWindowFocusChanged", hasFocus)
    }
}

2. Flutter层监听原生传递的状态

在Flutter页面中注册MethodChannel,接收焦点状态并更新UI:

import 'package:flutter/services.dart';
import 'package:flutter/material.dart';

class YourPage extends StatefulWidget {
  const YourPage({super.key});

  @override
  State<YourPage> createState() => _YourPageState();
}

class _YourPageState extends State<YourPage> {
  late MethodChannel _channel;
  bool shouldBlur = false;

  @override
  void initState() {
    super.initState();
    _channel = const MethodChannel("app_lifecycle");
    _channel.setMethodCallHandler((call) async {
      if (call.method == "onWindowFocusChanged") {
        final bool hasFocus = call.arguments as bool;
        setState(() {
          shouldBlur = !hasFocus;
        });
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: [
          // 你的主内容
          const Center(child: Text("主内容")),
          // 根据shouldBlur添加模糊层
          if (shouldBlur)
            BackdropFilter(
              filter: const ImageFilter.blur(sigmaX: 5, sigmaY: 5),
              child: Container(color: Colors.black.withOpacity(0.3)),
            ),
        ],
      ),
    );
  }
}

补充说明

  • 该方案仅针对Android平台,可通过Platform.isAndroid做条件判断,避免影响iOS的生命周期逻辑。
  • 当用户从最近应用列表回到应用时,onWindowFocusChanged(true)会被触发,shouldBlur会被重置为false。

内容的提问来源于stack exchange,提问作者Balaji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:33:17