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
},
网友评论