在应用中肯定遇到有这样的问题,在应用中在于多的Activity中跳转,这些Activity都存在Activity栈中了。所以按返回键的时候都是一个一个的将原来的Activity弹回。如果我们想捕获到back事件之后直接退出整个程序,就要思考了。特别是2.2之后的安全机制考虑之后。
粘贴点代码,以备之后使用。
- packagecom.jftt;
-
importandroid.app.Activity;
-
importandroid.app.ActivityManager;
-
importandroid.app.AlertDialog;
-
importandroid.content.Context;
-
importandroid.content.DialogInterface;
-
importandroid.content.Intent;
-
importandroid.os.Bundle;
-
importandroid.util.Log;
-
importandroid.view.KeyEvent;
-
importandroid.view.View;
-
importandroid.view.View.OnClickListener;
-
importandroid.widget.Button;
-
publicclassTestLogoutextendsActivity{
-
publicstaticfinalStringTAG=TestLogout.class.getSimpleName();
-
privateButtonbtn1;
-
privateButtonbtn2;
-
privateButtonbtn3;
-
privateButtonbtn4;
-
privateButtonbtn5;
-
privateButtongo;
-
@Override
-
protectedvoidonCreate(BundlesavedInstanceState){
-
super.onCreate(savedInstanceState);
- setContentView(R.layout.logout);
-
this.onStart();
- btn1=(Button)findViewById(R.id.btn1);
-
btn1.setOnClickListener(newOnClickListener(){
-
@Override
-
publicvoidonClick(Viewv){
-
android.os.Process.killProcess(android.os.Process.myPid());
- }
- });
- btn2=(Button)findViewById(R.id.btn2);
-
btn2.setOnClickListener(newOnClickListener(){
-
@Override
-
publicvoidonClick(Viewv){
-
System.exit(0);
- }
- });
- btn3=(Button)findViewById(R.id.btn3);
-
btn3.setOnClickListener(newOnClickListener(){
-
@Override
-
publicvoidonClick(Viewv){
-
Log.i(TAG,"close"+getPackageName());
-
ActivityManageram=(ActivityManager)TestLogout.this.getSystemService(Context.ACTIVITY_SERVICE);
- am.restartPackage(getPackageName());
-
- }
- });
-
- btn4=(Button)findViewById(R.id.btn4);
-
btn4.setOnClickListener(newOnClickListener(){
-
@Override
-
publicvoidonClick(Viewv){
-
Intentintent=newIntent();
-
-
intent.setClass(TestLogout.this,TestLogout.class);
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-
intent.putExtra("flag",1);
- startActivity(intent);
- }
- });
-
-
- btn5=(Button)findViewById(R.id.btn5);
-
btn5.setOnClickListener(newOnClickListener(){
-
@Override
-
publicvoidonClick(Viewv){
-
IntentstartMain=newIntent(Intent.ACTION_MAIN);
- startMain.addCategory(Intent.CATEGORY_HOME);
- startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(startMain);
- }
- });
- go=(Button)findViewById(R.id.go);
-
go.setOnClickListener(newOnClickListener(){
-
@Override
-
publicvoidonClick(Viewv){
-
Intentintent=newIntent(TestLogout.this,TestLogout.class);
-
- startActivity(intent);
- }
- });
- }
-
-
protectedvoidonStart(){
-
super.onStart();
- Intentintent=getIntent();
-
intx=intent.getIntExtra("flag",-1);
-
if(x==0){
- finish();
- }
- }
-
-
@Override
-
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
-
if(keyCode==KeyEvent.KEYCODE_BACK&&event.getRepeatCount()==0){
-
AlertDialog.BuilderalertbBuilder=newAlertDialog.Builder(this);
-
alertbBuilder.setIcon(R.drawable.icon).setTitle("友情提示...").setMessage("你确定要离开吗?");
-
alertbBuilder.setPositiveButton("确定",newDialogInterface.OnClickListener(){
-
@Override
-
publicvoidonClick(DialogInterfacedialog,intwhich){
-
-
intnPid=android.os.Process.myPid();
- android.os.Process.killProcess(nPid);
- }
- });
-
alertbBuilder.setNegativeButton("取消",newDialogInterface.OnClickListener(){
-
@Override
-
publicvoidonClick(DialogInterfacedialog,intwhich){
- dialog.cancel();
- }
- }).create();
- alertbBuilder.show();
- }
-
returntrue;
- }
- }
- packagecom.jftt;
-
importjava.util.Stack;
-
importandroid.app.Activity;
-
publicclassActiivtyStack{
-
privatestaticStack<Activity>mActivityStack;
-
privatestaticActiivtyStackinstance;
-
privateActiivtyStack(){
- }
-
publicstaticActiivtyStackgetScreenManager(){
-
if(instance==null){
-
instance=newActiivtyStack();
- }
-
returninstance;
- }
-
-
publicvoidpopActivity(Activityactivity){
-
if(activity!=null){
- activity.finish();
- mActivityStack.remove(activity);
-
-
activity=null;
- }
- }
-
-
publicActivitycurrentActivity(){
- Activityactivity=mActivityStack.lastElement();
-
-
returnactivity;
- }
-
-
publicvoidpushActivity(Activityactivity){
-
if(mActivityStack==null){
-
mActivityStack=newStack<Activity>();
- }
- mActivityStack.add(activity);
-
- }
-
-
publicvoidpopAllActivityExceptOne(Class<Activity>cls){
-
while(true){
- Activityactivity=currentActivity();
-
if(activity==null){
-
break;
- }
-
if(activity.getClass().equals(cls)){
-
break;
- }
- popActivity(activity);
- }
- }
- }
logout.xml
- <?xmlversion="1.0"encoding="utf-8"?>
-
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
-
android:orientation="vertical"
-
android:layout_width="fill_parent"
-
android:layout_height="fill_parent"
-
>
-
<Button
-
android:id="@+id/btn1"
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content"
-
android:text="logoutbutton1"
-
/>
-
<Button
-
android:id="@+id/btn2"
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content"
-
android:text="logoutbutton2"
-
/>
-
<Button
-
android:id="@+id/btn3"
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content"
-
android:text="logoutbutton3"
-
/>
-
<Button
-
android:id="@+id/btn4"
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content"
-
android:text="gotofirst"
-
/>
-
<Button
-
android:id="@+id/btn5"
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content"
-
android:text="gotolauncher"
-
/>
-
<Button
-
android:id="@+id/go"
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content"
-
android:text="goanotheractivity"
-
/>
- <!--
-
<EditText
-
android:id="@+id/et01"
-
android:layout_width="fill_parent"
-
android:layout_height="fill_parent"
-
/>
-
<ImageView
-
android:id="@+id/iv01"
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"
-
/>
-
-->
-
</LinearLayout>
manifest中的权限:
- <uses-permissionandroid:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
-
<uses-permissionandroid:name="android.permission.RESTART_PACKAGE"/>
分享到:
相关推荐
2 设置入口activity的启动模式android:launchMode="singleTask",重写onNewIntent方法, 在退出activity时,设置intent.setAction("exit_app");然后跳转到栈底activity, 这样就可以清除栈底之外的所有activity,...
本文实例讲述了Android编程之退出整个应用程序的方法。分享给大家供大家参考,具体如下: 我们在写android应用程序时,经常会遇到想退出当前Acitivity,或者直接退出应用程序.我之前的一般操作是按返回键,或者直接...
大家使用Android的原生UI都知道,Android的Activity跳转就是很生硬的切换界面。其实Android的Activity跳转可以设置各种动画。下面给大家看看效果: 实现非常简单,用overridePendingtransition(int inId, int outId)...
支持android studio上运行,简单的安卓界面跳转,点击两次返回可退出安卓程序界面,这是这样子呀呀呀呀
android退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个Activity(也就是入口的Activity)时生效。如果有A,B,C三个Activity,而想在B或C中...
Activity A跳转Activity B,再按返回键,A、B的生命周期执行顺序是什么? 当听到这个题目的时候,我得意地笑了笑,对于Activity的生命周期已经记熟的我,心想,为什么不直接问Activity的生命周期呢?于是想当然的说...
android 退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个Activity(也就是入口的Activity)时生效。如果有A,B,C三个Activity,而想在B 或C 中...
注意,切换方法overridePendingTransition只能在startActivity和finish方法之后调用。 第一个参数为第一个Activity离开时的动画,第二参数为所进入的Activity的动画效果 淡入淡出效果 overridePendingTransition(R....
两个activity 相互跳转,按返回键的时候重复跳转的步骤,退不出去,所以在这里加了个容器,把每个activity都添加到这个容器中,在退出程序的时候就调用这个容器把这些activity全部关闭。
当然,据网上有人将要比较安全的实现关闭程序的功能也不是挺简单的,因为android有专门的退出键返回键等。所以该Close按钮暂时没去实现它。我的第1个activity为HelloworldActivity,第2个activity为NextActivity.实验...
这是一个很多很多人都 会遇到的问题,我也试过了很...当需要退出程序的时候就发送一条关闭activity的广播,这样所有的activity都会接收到,然后所有activity都会自己finish了。 代码如下: package com.example.exitsy
android应用当中Activity间相互跳转比较常见。本文将通过例子跟踪一下2个Activity间跳转过程中生命周期的变化过程。 整个操作过程如下图所示: 1. 打开应用,自动开启First Activity; 2. 按下“Jump Button”按钮...
当应用程序跳转到SecondActivity时,我想退出应用程序,发现,我要连续点击back三次才能退出应用程序,(不太了解活动栈的童鞋,先百度一下活动栈是什么,我简要说一下,活动栈,是android系统维护的一个activity栈...
安卓activity跳转华丽过渡效果,Activity的切换动画指的是从一个activity跳转到另外一个activity时的动画。{它包括两个部分:一部分是第一个activity退出时的动画;另外一部分时第二个activity进入时的动画; 在...
Activity的跳转动画在5.0的时候做了一个重大的突破,下面来看一下吧 1.5.0之前的overridePendingTransition 相信大家对OverridePendingTransition还是很熟悉的,使用方法也是很简单就是 //fade_in是第二个界面的进入...
按钮“退出程序”,关闭APP 进入Android题目界面后,依次布局两个TextView,一组RadioGroup+RadioButton,一个Button确定答案,一个Texview显示结果,一个Button“下一题”,跳转到考试结束界面。 最后考试...
后台播放创建一个类继承service方法,在该类中使其具有播放暂 停下一首上一首的功能的方法,从而是它在各个Activity之间进行跳转的时候为其他的 类提供相应的方法。创建一个新建文件类和过滤文件信息的类,用以存贮...
此大作业从头到尾每句代码都有自己亲自手敲,程序无任何问题,工具为AndroidStudio, 最后期末成绩95分(因为平时分不高),此作业满足下面所有要求 大作业要求: 1、使用到相对布局和线性布局 2、使用到TextView ...
Activity栈底为透明activity,启动其它activity用的tag为Intent.FLAG_ACTIVITY_SINGLE_TOP, 退出时跳转到透明activity 标签为Intent.FLAG_ACTIVITY_CLEAR_TOP。