在设置了android:parentActivityName后,点击子Activity返回键,父Activity总会调用OnDestroy()的解决方案

最近查了很久这个事情,分享给大家,

原理很简单,一个Activity在manifet里声明了android:parentActivityName;这时候通过Activity左上角的返回按钮点击返回,

启动声明的父Activity,总会先调用父Activity的OnDestroy方法,具体如下面所说:

    <activity
        android:name="com.example.helloworld.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.helloworld.MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.helloworld.MainActivity" />
    </activity>
DisplayMessageActivity为子Activity,而MainActivity为父Activity,点击
DisplayMessageActivity的左上角返回按钮的时候,调用逻辑如下:
MainActivity.onDestroy()
MainActivity.onCreate(null)
MainActivity.onStart()

解决方案是:

为设置MainActivity属性android:launchMode=singleTop

顺便脑补android:parentActivityName的作用,就是为了左上角给子Activity加一个返回按钮,具体信息如下:
Android 4.1提高性能、增强用户体验

  App 栈导航:通过设置android:parentActivityName改变回退栈的内容,如果栈中没有parentActivity,则合成栈,通过onPrepareNavigateUpTaskStack()改变parentActivity中的内容。
时间: 2024-11-08 14:12:05

在设置了android:parentActivityName后,点击子Activity返回键,父Activity总会调用OnDestroy()的解决方案的相关文章

Android如何实现点击一次返回键返回桌面而不是退出应用

具体代码如下所示: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { Intent home = new Intent(Intent.ACTION_MAIN); home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); home.addCategory(Intent.CATEGORY_HOME); s

【Android笔记】Android中实现“点击两次返回键退出”

用户退出应用前给出一个提示是很有必要的,因为可能是用户并不真的想退出,而只是一不小心按下了返回键,大部分应用的做法是在应用退出去前给出一个Dialog,我觉得这样不太友好,用户还得移动手指去按dialog中的按钮.个人觉得“再按一次返回键退出程序”是best practice,实现也很简单,直接上代码: 1 private long exitTime = 0; 2 3 @Override 4 public boolean onKeyDown(int keyCode, KeyEvent event

android实现点击两次返回键实现退出功能

在使用android平台的app是我们经常会发现点击两次返回键会提示是否退出的功能,下面讲讲此功能是如何实现的(此方法比较简单) 第一种方法是对系统返回键进行监听,定义一个变量记录按键时间,通过计算时间差来实现该功能,代码如下: //退出时的时间private long mExitTime;//对返回键进行监听@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCO

android中的返回键与Activity

我在做应用时遇到一个问题,就是在启动主页面时需要预先加载一些数据,我是在一个加载页中处理完这些数据然后再转到主页面,但当我在主页面中按返回键时,系统会返回加载页面.我不希望加载页在使用完之后还被保留在任务中. Android的官方文档中这样描述的返回栈.任务和activity的默认关系: 1:当从Activity A中启动Activity B时,Activity A停止,但是保存了它的状态(比如,滚动位置和表单中的文字).如果当用户在Activity B中按了返回键,Activity A会恢复之

【转】Android实现点击两次返回键退出

在做安卓应用是我们经常要判断用户对返回键的操作,一般为了防止误操作都是在用户连续按下两次返回键的时候提示用户是否退出应用程序. 第一种实现的基本原理就是,当按下BACK键时,会被onKeyDown捕获,判断是BACK键,则执行exit方法. 在exit方法中,会首先判断isExit的值,如果为false的话,则置为true,同时会弹出提示,并在2000毫秒(2秒)后发出一个消息,在 Handler中将此值还原成false.如果在发送消息间隔的2秒内,再次按了BACK键,则再次执行exit方法,此

Android连续点击两次返回键退出应用,提示“再按一次退出应用&quot;

// 定义一个long型变量,用于判断两次点击的间隔 private long exitTime: // 实现返回键的点击事件 public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { exit(); // 在这里进行点击判断 return false; } return super.onKeyDown(keyCode, event); } public void

Android实现点击两次返回键退出

在做android应用是我们经常要判断用户对返回键的操作,一般为了防止误操作都是在用户连续按下两次返回键的时候提示用户是否退出应用程序. 原理: 监听back键的按下,需要重写onKeyDown()方法,判断两次按下的时差,如果小于2秒,就退出,反之亦然. 第一种: package com.example.appexitdemo; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import a

安卓---连续点击两次返回键退出程序---二级界面的退出程序

法一:实现方式,通过记录按键时间计算时间差实现: import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.widget.Toast; public class MainActivity extends Activity { private long exitTime = 0; @Override protected void onCreate(Bundl

Android 优雅的让Fragment监听返回键

Activity可以很容易的得到物理返回键的监听事件,而Fragment却不能.假设FragmentActivity有三个Fragment,一般安卓用户期望点击返回键会一层层返回到FragmentActivity.当然,我们可以将每个Fragment对应的Transaction放到BackStack中,但是如果每个Fragment有对返回事件的特殊消费,那么在FragmentActivity的onBackPressed()中的代码就会比较混乱,例如: @Override public void