onBackPressed、onKeyDown、finish、onDestroy

2023-12-23 05:08

本文主要是介绍onBackPressed、onKeyDown、finish、onDestroy,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

监听返回键的两种方式:

// 捕获返回键的方法1  @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {// 按下BACK,同时没有重复  Log.d(TAG, "onKeyDown()");}return super.onKeyDown(keyCode, event);}// 捕获返回键的方法2  @Overridepublic void onBackPressed() {Log.d(TAG, "onBackPressed()");super.onBackPressed();}

onBackPressed与onKeyDown区别:

相同点:
最终都会调用finish方法

不同点:
onBackPressed适用于api小于5(Android2.0),且按back键,无重复
onKeyDown适用于Android2.0或更新版的sdk

onBackPressed与finish区别:

如果使用onBackPressed(),假如你的Activity有添加管理frgament回退的话,调用该方法是不会退出Activity的.直到Fragment回退栈清空,才会退出Activity。

如果使用finish(),那么就会直接退出Activity。

Activity中finish() onDestroy() 和System.exit()的区别

Activity.finish()

Call this when your activity is done and should be closed.
在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。

当你调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。
因为移出了栈,所以当你点击手机上面的“back”按键的时候,也不会再找到这个Activity。

Activity.onDestory()

the system is temporarily destroying this instance of the activity to save space.
系统销毁了这个Activity的实例在内存中占据的空间。

在Activity的生命周期中,onDestory()方法是他生命的最后一步,资源空间等就被回收了。当重新进入此Activity的时候,必须重新创建,执行onCreate()方法。

System.exit(0)

这玩意是退出整个应用程序的,是针对整个Application的。将整个进程直接KO掉。

finish函数仅仅把当前Activity退出了,但是并没有释放他的资源。
安卓系统自己决定何时从内存中释放应用程序。
当系统没有可用内存到时候,会按照优先级,释放部分应用。

源码探索:

1 点击 super.onKeyDown(keyCode, event);

public boolean onKeyDown(int keyCode, KeyEvent event) {if(VERSION.SDK_INT < 5 && keyCode == 4 && event.getRepeatCount() == 0) {//onBackPressed适用于api小于5(Android2.0),且按back键,无重复this.onBackPressed();return true;} else {//onKeyDown适用于Android2.0或更新版的sdkreturn super.onKeyDown(keyCode, event);}}

1.1 点击查看 this.onBackPressed();方法:

    public void onBackPressed() {if(!this.mFragments.getSupportFragmentManager().popBackStackImmediate()) {this.supportFinishAfterTransition();}}

1.1.1 点击this.supportFinishAfterTransition();方法

    public void supportFinishAfterTransition() {ActivityCompat.finishAfterTransition(this);}

1.1.1.1 点击ActivityCompat.finishAfterTransition(this);方法

    public static void finishAfterTransition(Activity activity) {if(VERSION.SDK_INT >= 21) {//api大于等于21ActivityCompat21.finishAfterTransition(activity);} else {activity.finish();}}

1.1.1.1.1 点击ActivityCompat21.finishAfterTransition(activity);方法

    public static void finishAfterTransition(Activity activity) {activity.finishAfterTransition();}

1.1.1.1.1.1 点击activity.finishAfterTransition();方法

    public void finishAfterTransition() {if (!mActivityTransitionState.startExitBackTransition(this)) {finish();}}

这篇关于onBackPressed、onKeyDown、finish、onDestroy的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/526814

相关文章

Android 向右滑动销毁(finish)Activity

转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/20934541),请尊重他人的辛勤劳动成果,谢谢! 今天给大家带来一个向右滑动销毁Activity的效果,Activtiy随着手指的移动而移动,该效果在Android应用中还是比较少见的,在IOS中就比较常见了,例如“网易新闻” ,"美食杰" , "淘

关于调用finish()后dialog一闪而过的问题

这个问题困扰了我很久,能够解决我真的高兴,我高兴的并不是解决这个问题,而是了解一段代码的逻辑在此感谢REGT,对我的教导 废话少说:  举例说明吧:    privare void A(){     //其它相关代码     showDialog();    //最后调用finish方法    this.finish(); } private void showWarning

onkeypress 和 onkeydown 的区别

 本文将详细介绍js onkeypress与onkeydown 事件区别:一个放开一个没有放开,onkeydown先于onkeypress 发生,需要的朋友可以参考下 onkeypress 和 onkeydown 是有区别,下面将讲解 onkeypress 与 onkeydown 事件的区别。  onkeypress 事件在用户按下并放开任何字母数字键时发生。但是系统按钮(例如:箭

Android中进入下一个Activity时在上一个Activity主动调用onDestroy()方法不会真正将上一个Activity从栈中删除

因为要完成任务,就调试了一个最基础的程序,就当再了解一下Activity的生命周期了~ 先描述一下大概的情况哈:现在就只有两个Activity,分别是FirstActivity和SecActivity,在FirstActivity中有一个Button控件,功能是按下这个Button就转向SecActivity,同时,在FirstActivity的onPause()方法中自己主动调用onDest

Activity的onPause()、onStop()和onDestroy()里要做的事情

onPause(): 当系统调用你的activity中的onPause(),从技术上讲,那意味着你的activity仍然处于部分可见的状态,当时大多数时候,那意味着用户正在离开这个activity并马上会进入Stopped state. 你通常应该在onPause()回调方法里面做下面的事情: 停止动画或者是其他正在运行的操作,那些都会导致CPU的浪费.提交没有保存的改变,但是仅仅是在用户离

阿里云 MQTT 服务器搭建与测试(上传和下发数据finish)

一、 MQTT 概念 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于 TCP/IP协议上,由 IBM 在 1999 年发布。MQTT 最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用

概念onkeypress、onkeyup、onkeydown区别:

onkeypress 这个事件在用户按下并放开任何字母数字键时发生。系统按钮(例如,箭头键和功能键)无法得到识别。 onkeyup 这个事件在用户放开任何先前按下的键盘键时发生。onkeydown 这个事件在用户按下任何键盘键(包括系统按钮,如箭头键和功能键)时发生。小demo:只在在输入的时候可以用backspace,其他地方不可以用。<script type="text/javascript"

关闭Activity.finish()之后出现 Activity has leaked window that was originally added 错误

该错误是由于在Activity中创建并显示了Alertdialog,但并未使用Activity提供的showDialog()方法,因此导致在Activity被结束后,Alertdialog所引用的context为空。 解决办法为 1.将dialog采用oncreateDialog的方式创建,交由系统维护。 2.在onDestroy()方法中将该alertdialog dismiss掉。

在输入框输入完数据是,enter键便捷操作、 onkeydown()事件。

document.onkeydown = function(e){  var ev = document.all ? window.event : e; if(ev.keyCode==13) { $('#btn').click(); return false; } } $('#btn').click(function(){ //逻辑操作 });

Animating with Blender: How to Create Short Animations from Start to Finish

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。 http://blog.csdn.net/topmvp - topmvp   Channel Data Warehouse Sql Language ACCESS FileMaker Data Mining Database Design Database General