美文网首页uin-app简明uniapp教程
监听back键事件并实现和home键一样的效果

监听back键事件并实现和home键一样的效果

作者: 瑟闻风倾 | 来源:发表于2019-11-22 16:27 被阅读0次

1. 两者介绍

  • back键

Android的程序无需刻意的去退出:当按下手机back键,系统会默认调用程序栈中最上层Activity的Destroy()方法来销毁当前Activity,当此Activity又被其它Activity启动起来的时候,会重新调用OnCreate()方法进行创建,当栈中所有Activity都弹出结束后,应用也就随之结束了。

  • home键

Android程序的隐藏:当按下手机Home键,系统会默认调用程序栈中最上层Activity的stop()方法,然后整个应用程序都会被隐藏起来,当再次点击手机桌面上应用程序图标时,系统会调用最上层Activity的OnResume()方法,此时不会重新打开程序,而是直接进入,会直接显示程序栈中最上层的Activity。

2. uniapp中两者点击效果对比

back键:uniapp项目在登录页点击back键退出应用后,再点击应用图标启动应用时会重新加载启动图
home键:uniapp项目在当前页点击home键也会退出应用,再点击应用图标会直接打开退出前的页面,不会再加载启动图
分析:点击back键退出应用,再启动应用时又加载启动图,用户体验很不好。怎么实现和home键相同的效果呢?从而解决登录页点击back键退出应用后再点击图标又显示启动图的问题

3. 监听back键

可通过页面生命周期函数onBackPress()来监听页面返回,也可通过plus.key.addEventListener来注册监听"backbutton"事件。

onBackPress:function(){
    console.log("点击了返回键");
}

plus.key.addEventListener('backbutton',function(){
    console.log("点击了返回键-backbutton");
});

4. 实现back键和home键一样的点击的效果

(1)方案一:参考android原生实现

onBackPress:function(){
    // #ifdef APP-PLUS
    var mainActivity = plus.android.runtimeMainActivity();
    var Intent = plus.android.importClass("android.content.Intent");
    var intent = new Intent(Intent.ACTION_MAIN);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    mainActivity.startActivity(i);  
    // #endif
}

onLoad:function(){
    // #ifdef APP-PLUS
    plus.key.addEventListener('backbutton',function(){
        console.log("点击了返回键-backbutton");
        var mainActivity = plus.android.runtimeMainActivity();
            var Intent = plus.android.importClass("android.content.Intent");
            var intent = new Intent(Intent.ACTION_MAIN);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
            intent.addCategory(Intent.CATEGORY_HOME); 
            mainActivity.startActivity(i); 
    });
    // #endif
},

参考了android原生实现,即:

@Override
public void onBackPressed() { 
    //super.onBackPressed();这句话一定要注掉,不然又去调用默认的back处理方式了 

    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    startActivity(i);  
}

(2)方案二:参考uniapp官网提供的实现点击返回键进入后台

//back键实现和home键一样的点击效果
onBackPress:function(event){//只有返回值为 true 时,才表示不执行默认的返回,自行处理此时的业务逻辑
    console.log("onBackPress:" + JSON.stringify(event));
    // #ifdef APP-PLUS
    /* if (event.from === "backbutton") {
        var mainActivity = plus.android.runtimeMainActivity();
        mainActivity.moveTaskToBack(false);
        return true;
    } */  
    var mainActivity = plus.android.runtimeMainActivity();
    mainActivity.moveTaskToBack(false);
    // #endif
}

onLoad:function(){
    // #ifdef APP-PLUS
    plus.key.addEventListener('backbutton',function(){
        console.log("点击了返回键-backbutton");
        var mainActivity = plus.android.runtimeMainActivity();
        mainActivity.moveTaskToBack(false);
    });
    // #endif
},

相关文章

网友评论

    本文标题:监听back键事件并实现和home键一样的效果

    本文链接:https://www.haomeiwen.com/subject/bsdqwctx.html