moveTaskToback退后台的用法及作用

1

方法:public boolean moveTaskToBack(boolean nonRoot)

activity里有这个方法,参数说明如下:

nonRoot=false→ 仅当activity为task根(即首个activity例如启动activity之类的)时才生效

nonRoot=true→ 忽略上面的限制

这个方法不会改变task中的activity中的顺序,效果基本等同于home键

应用场景:

比如有些activity诸如引导图之类的,用户在按返回键的时候你并不希望退出(默认就finish了),而是只希望置后台,就可以调这个方法


2


moveTaskToBack()方法:在activity中调用 moveTaskToBack (boolean
nonRoot)
方法即可将activity 退到后台,注意不是finish()退出。

参数说明:

参数为false——代表只有当前activity是task根,指应用启动的第一个activity时,才有效;

参数为true——则忽略这个限制,任何activity都可以有效。

说明:判断Activity是否是task根,Activity本身给出了相关方法:isTaskRoot()

 

moveTaskToBack调用后,task中activity的顺序不会发生变化,例如A启动B,B中调用此方法退到后台,重新启动应用会调用B中的onRestart-onStart-onResume方法,不会重新调用onCreate,而且在B中按下back键返回的还是A,这就是退到后台的功能。


3

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

`moveTaskToBack` 是一个 Activity 中的方法,可以将当前 Activity 移动到后台,而不销毁该 Activity。如果你在 Flutter 项目中使用该方法,应该先获取到 Activity,然后再调用该方法。 具体做法如下: 1. 创建一个 `MethodChannel` 对象来和原生代码通信。 ```dart import 'package:flutter/services.dart'; const platform = MethodChannel('com.example.myApp/myChannel'); ``` 2. 在需要处理返回键事件的页面中,添加以下代码: ```dart class MyPage extends StatefulWidget { @override _MyPageState createState() => _MyPageState(); } class _MyPageState extends State<MyPage> { @override void initState() { super.initState(); // 注册返回键监听器 platform.setMethodCallHandler(_handleMethod); } Future<dynamic> _handleMethod(MethodCall call) async { switch (call.method) { case 'onBackPressed': // 处理返回键事件 await platform.invokeMethod('moveTaskToBack'); return Future.value(false); } return Future.value(true); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('My Page')), body: Center(child: Text('Hello, World!')), ); } } ``` 3. 在原生代码中,将 `moveTaskToBack` 方法添加到 `MyChannel` 中,并在需要调用的地方调用该方法。 ```java public class MainActivity extends FlutterActivity { private static final String CHANNEL = "com.example.myApp/myChannel"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GeneratedPluginRegistrant.registerWith(this); new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler( (call, result) -> { switch (call.method) { case "moveTaskToBack": moveTaskToBack(true); result.success(null); break; default: result.notImplemented(); break; } } ); } } ``` 这样,当用户点击返回键时,就会调用 `moveTaskToBack` 方法将应用程序移到后台
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值