android——如何从一个activity中退出程序

软件一运行起来,先是一个主Activity显示一张图片。然后用startActivity(Intent intent)方法打开另一个Activity。我想在这个Activity中让用户按返回键后,不返回到前一个Activity,而是弹出一个对话框,提示软件是否关闭。

这里有两个问题:

1.截取返回按键事件,屏蔽返回行为。只需要在程序里加入这段就好

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if(keyCode == KeyEvent.KEYCODE_BACK){

//这里写你要在用户按下返回键同时执行的动作

moveTaskToBack(false);            //核心代码:屏蔽返回行为

return true;

}

return super.onKeyDown(keyCode, event);

}

2.不反回是实现了,但怎么来关闭程序呢?这个问题我用了一晚上才想到一个自己的方法,先是在网上找,什么system.exit、什么用Activity栈(什么标记Activity)、什么用restartProcess(还涉及到版本问题,什么2.2一下怎么了,2.3以上又要怎么弄)还要加什么permission,告诉你,用户最讨厌的就是一个他不熟悉的、不知名的软件,在安装的时候提示:该程序需要完全网路连接、该程序作为什么什么系统进程等等,用户最讨厌的往往就是这些红字。。。反正没一个方法成功了的,求人不如求己,想到了一个巧方法,并成功运用于自己软件,现在拿出来分享。

首先我们有两个Activity,分别叫A和B。打开软件,自动启动A,再跳转到B。问题是怎么在B中将A和B同时关闭。好的,解决方法来了:先在A的class中定义一个 private int flag=0;   再在A的onResume()方法中加入

flag++;

if(flag>=2)

finish();

当软件开起来的时候,A被打开,现在flag是1;(因为一个Activity被创建的时候先是执行onCreate再执行onResume,所以这里的i在onResume中自增一次)。现在跳转到B(注意A不能finish()  要直接跳转,要不然B中的moveTaskToBack(false)不起作用的,一定要记住,不信自己试试,这就是Android变态之处,害我一晚上)。在B中调用finish(),Activity栈中B被弹走,只剩A,又执行A,这时,先从A的onResume开始执行,故i再次自增为2,满足条件,A也被finish()了,至此Acitivity栈为空,程序结束。(这段时间极短,屏幕上根本看不到A,效果就是从B直接关掉了整个程序)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 19:59:36

android——如何从一个activity中退出程序的相关文章

【Android】一个activity中垂直排列两个listview

为了实现这种效果,一开始我想到的办法是ilistVew中加上一个footerview,footerview里面嵌套一个listview,但是实际操作之后发现footerview里的listview只显示一项,这个问题困扰了半天,一直没有找到合适的解决办法,直到昨天晚上偶然看到一篇博文介绍说,scrollview里嵌套listview也出现了同样的问题,解决办法是动态设置listview的高度,于是我用这种方法也试了试,结果还真解决了. MainActivity.java package com.

android开发之Fragment加载到一个Activity中

Fragments 是android3.0以后添加的.主要是为了方便android平板端的开发.方便适应不同大小的屏幕.此代码是为了最简单的Fragment的使用,往一个Activity中添加Fragment,主要涉及的知识点有:1.Fragment类的创建,2.Fragment的添加3.无UI的 Fragment的添加,根据Tag找回Fragment Fragment对应的Xml布局文件, <LinearLayout xmlns:android="http://schemas.andro

android开发之在activity中控制另一个activity的UI更新

转自:http://blog.csdn.net/jason0539/article/details/18075293 第一种方法: 遇到一个问题,需要在一个activity中控制另一个acitivity做一些更新,没想到传递handler的方法,通过以下方式解决. 1.在MyAPP中定义属性handler 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package jason.com;     import jas

Android世界第一个activity启动过程

Android世界第一个activity启动过程 第一次使用Markdown,感觉不错. Android系统从按下开机键一直到launcher的出现,是一个怎样的过程,中间都做出了什么操作呢,带着这些疑问开始源码之旅. 像windows操作系统一样,每个系统的启动都会有一个引导程序,在linux中,当引导程序启动linux内核后,会加载各种驱动和数据结构,当有了驱动之后,开始加载Android系统,开始进入linux世界的第一个进程:init进程. 在init.c的main中: int main

一个Activity中使用两个layout实例

package com.sbs.aas2l; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; imp

android获得上一个activity的返回值来设定当前按钮的可按性

每次想去转载别人的文章就不用自己写了,好想这样省事,但是路途就是那么的艰辛,每次看别人的博客然后自己做时会遇到各种各样的问题,人家的博客就那么几个步骤,然而我照着做时就会遇到奇葩问题,,哎,现在想起了曲婉婷的一首歌<没有什么不同>的歌词尽管痛的苦的没说的,但哪有一路走来都是顺风的,只要为了梦想不服输,再苦也不停止脚步.还是自己总结一下把!! 首先我为以前做都的项目的app新增加了个按钮,要求这个按钮在没获得上一个activity返回过来的值前不能按,这样我就找到了方法,就是使用startAct

Android扩展-怎么在Activity中拿到一个View的宽和高

今天来简单的介绍一下怎么在Activity中拿到View的width和height.有人可能会疑问,这个有什么难的,我们直接可以在Activity生命周期函数里面获取width和height.看似简单,实际上在onCreate.onStart.onResume中均无法获取正确的width和height,这是因为View的measure过程和Activity的生命周期方法不是同步的,因此无法保证Activity执行了onCreate.onStart.onResume时,某个View已经测量完毕,如

如何把一个listview中选中的值展示到另外一个 activity中

我正在创建一个简单的app,有一个功能是从第一个listView中取到选中的值展示到第二个activity中,中间是用了Intent传递,但是现在有个问题时我不知道如何才能在第二个activity中. MainActivity.java [java] view plaincopy package com.devleb.listviewdemo; import android.app.ListActivity; import android.content.Intent; import andro

android小技巧:在activity中实现与绑定的fragment的回调

看到标题你可能会想是一个多么高大上的技巧呢?其实很一般就是自定义回调函数. 首先我们知道activity之间的数据传递有几种方式: 一是startActivityForResut()启动一个activity,当栈顶activity 调用onActivityResult()并且 finish 掉时将会传递消息给启动该activity的父activity. 二是在使用Fragment时,通过setTargetFragment()和onActivityResult()方法实现两个fragment之间的