android彻底退出应用_【移动开发】Android应用程序完全退出

前段期间,参加比赛做项目时遇到了一个问题:Android中应用程序弹出退出对话框退出应用程序时,老是出现上一个Activity,于是将在Activity跳转时将其finish()掉,结果还是不行!寻其原因:原来项目中有好多Activity用来显示界面,之间还掺扎着数据信息的交流,我们知道Activity是以栈的方式存放,要想将程序退出,自然得将众多Activity销毁掉了!

后来在网上查阅了一下,找到了解决方法,在此总结一下前辈们知识,使其更加系统化!

1.任务管理器方法(ActivityManager):

首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);

am.restartPackage(getPackageName());

系统会将,该包下的 ,所有进程,服务,全部杀掉,就可以杀干净了,要注意加上

2.Dalvik VM的本地方法:

android.os.Process.killProcess(android.os.Process.myPid()) //获取PID

System.exit(0); //常规java、c#的标准退出法,返回值为0代表正常退出

3.一种比较流行的Android经典完美退出方法:

使用单例模式创建一个Activity管理对象,该对象中有一个Activity容器(具体实现自己处理,使用LinkedList等)专门负责存储新开启的每一个Activity,并且容易理解、易于操作,非常不错!

A.MyApplication类(储存每一个Activity,并实现关闭所有Activity的操作)

public class MyApplication extends Application {

//对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList实现了基于动态数组的数据结构,要移动数据。LinkedList基于链表的数据结构,便于增加删除

private List activityList = new LinkedList();

private static MyApplication instance;

private MyApplication(){ }

//单例模式中获取唯一的MyApplication实例

public static MyApplication getInstance() {

if(null == instance) {

instance = new MyApplication();

}

return instance;

}

//添加Activity到容器中

public void addActivity(Activity activity) {

activityList.add(activity);

}

//遍历所有Activity并finish

public void exit(){

for(Activity activity:activityList) {

activity.finish();

}

System.exit(0);

}

}

B.在每一个Activity中的onCreate方法里添加该Activity到MyApplication对象实例容器中

MyApplication.getInstance().addActivity(this);

C.在需要结束所有Activity的时候调用exit方法

MyApplication.getInstance().exit();

4.广播方式:

A. MyAcitivty类说明:Acitivty的子类,基础该类的子类必须实现onCreate 方法,在该类中注册了一个BroadcastReceiver 用于接收退出消息,在接收到消息之后结束自身

public abstract class MyAcitivty extends Activity {

/**负责各个具体 Activity 的显示**/

public abstract void onCreate();

@Override

public void onCreate(final Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

onCreate();

RegListener();

}

/**注册退出事件监听**/

public void RegListener() {

ExitListenerReceiver exitre = new ExitListenerReceiver();

IntentFilter intentfilter = new IntentFilter();

intentfilter.addAction(this.getPackageName() + "."

+ "ExitListenerReceiver");

this.registerReceiver(exitre, intentfilter);

}

class ExitListenerReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent i) {

((Activity) context).finish();

}

}

}

B.自己的Activity都继承MyAcitivty,到需要退出程序的时候发送广播

Intent intent = new Intent(context.getPackageName()+".ExitListenerReceiver");

context.sendBroadcast(intent);

即可。

5.一个技巧方式:

A.首先设定一个公用的class:Setting.java,定义一个静态类成员public boolean static isCloseAll=false;

B.然后,在每一个Activity的onResume()加入这一个:

@Override

onResume() {

super.onResume();

if(Setting.isCloseAll) finish();

}

C.当最后一个Activity需要结束整个程序便执行:Setting.isCloseAll=true;

finish();

6.捕获空指针异常

A.通过异常并在Application的子类中重新注册Thread的 Thread.UncaughtExceptionHandler接口:

package com.example.android_uncatchexception;

import android.app.Application;

public class MyCrashApplication extends Application {

@Override

public void onCreate() {

super.onCreate();

//程序一启动,就将未捕获异常初始化

CrashHandler.getInstance().init(getApplicationContext());

}

}

注:记得注册Application

B.自定义异常捕获类:package com.example.android_uncatchexception;

import java.lang.Thread.UncaughtExceptionHandler;

import android.content.Context;

import android.util.Log;

/**

* 自定义异常捕获类

*

* @author ZHF

*/

public class CrashHandler implements UncaughtExceptionHandler {

public static final String TAG = "CrashHandler";

// 程序的Context对象

private Context mContext;

/** 单例模式 **/

private CrashHandler() {

}

/** 懒汉式 **/

private static class CrashHolder {

static final CrashHandler crashHandler = new CrashHandler();

}

public static CrashHandler getInstance() {

return CrashHolder.crashHandler;

}

public void init(Context context) {

mContext = context;

// 设置该CrashHandler为程序的默认处理器

Thread.setDefaultUncaughtExceptionHandler(this);

}

@Override

public void uncaughtException(Thread thread, Throwable ex) {

Log.d(TAG,

"uncaughtException--->thread" + thread + " name: "

+ thread.getName() + " id: " + thread.getId() + "exception--->" + ex);

String threadName = thread.getName();

if("main".equals(threadName)) {

Log.d(TAG, "在主线程的崩溃!");

}else {

//这里我们根据thread name来进行区别对待:可以将异常信息写入文件供以后分析

Log.d(TAG, "在子线程中崩溃!");

}

android.os.Process.killProcess(android.os.Process.myPid()); //杀死该进程

System.exit(0); //退出

}

}

C.在要退出的地方制造空指针异常即可实现闪退,并且不会弹出ANR对话框

package com.example.android_uncatchexception;

import android.os.Bundle;

import android.app.Activity;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class MainActivity extends Activity {

Button mBtn;

String str; //不要初始化,为了下面制造空指针异常

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mBtn = (Button) this.findViewById(R.id.button1);

mBtn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

//NullPointerException

System.out.println(str);

}

});

}

}

7.网上还有一些其他方式:

A.restartPackage、

B. killBackgroundProcesses

不常用,大家可以自行参考哦~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android右滑退出是指在Android应用程序中,用户可以通过从左侧或右侧滑动手指来退出当前活动(Activity)。这种功能可以为用户提供更加便利的交互方式和更好的使用体验。 实现这种功能需要通过对Android系统提供的触摸事件进行处理。具体来说,需要在当前活动的onTouchEvent方法中监听手指触摸事件,并根据手指的移动距离和方向来判断用户是否要退出当前活动。如果手指从右侧向左侧滑动的距离达到一定阈值,就认为用户要退出当前活动,并执行退出操作。 在实现Android右滑退出时,需要注意设置合适的滑动阈值,避免误操作和用户体验不佳的问题。同时,还需要进行一些优化,例如在滑动过程中显示退出提示、滑动动画等,以增强用户体验。 总之,Android右滑退出是一种非常实用的功能,可以提高用户的交互体验和操作效率,也是Android应用程序开发中常见的功能之一。 ### 回答2: Android手机在日常使用中,我们经常点击HOME键返回桌面或使用返回键退出当前应用。而有一种更方便的退出方式叫做右滑退出。 右滑退出是一种快速、方便的退出方式,可以让用户在任何页面都能迅速离开应用。不用返回键,也不用找HOME键。 在使用右滑退出之前,需要先启用这个功能。打开“设置”-“系统”-“开发者选项”-“页面堆栈”,开启“右滑手势调出导航栏”。 使用右滑退出的方法是,在任何界面,快速从屏幕的右侧向左滑动一下即可。系统会自动退出应用并返回桌面。 但值得注意的是,右滑退出功能有一个限制,即当前应用必须是在前台运行的,或者是最近被使用过的应用。如果应用已经处于后台或者已经完全退出,右滑功能将无效。 此外,用户在使用右滑退出时,需要注意一些其他的问题。例如,如果在滑动过程中手指稍微停留了一下,可能会导致应用进入多任务模式。同时,一些特殊的应用也可能不支持该功能。 总之,右滑退出是一个方便快捷的退出应用的方式,但也需要我们在使用时注意一些细节问题。如果用户能够掌握好这个功能,可以提高手机的使用效率,更加便捷、自如地使用各种应用。 ### 回答3: 安卓右滑退出是一项非常实用的功能,它能够让用户更加方便地退出一个应用程序,而不是通过“返回”按钮或是“Home”键来实现。如果你是一名经常使用安卓设备的用户,那么你可能已经习惯了通过右滑手势来退出应用程序。 对于安卓设备来说,大多数版本都已经内置了右滑退出的功能。你只需要在应用程序中向右滑动手势,就可以直接退出应用程序。不过,有些应用程序可能并没有集成这一功能,这时你需要在设备的设置中自行开启该功能。 具体来说,你需要进入设备的“设置”页面,在“系统”或“显示与手势”选项中找到“手势”设置。在手势设置中,你可以选择开启或关闭一些手势功能,例如右滑退出、双击亮屏等等。如果你想开启右滑退出功能,只需要将其开关打开即可。 除了安卓系统自带的右滑退出功能,还有一些第三方应用程序可以提供更加优秀的右滑退出功能。例如,SwipeBack这个应用程序就可以让你在任意应用程序中使用右滑退出功能,而且可以自定义右滑手势的行为,非常实用。 总之,在安卓设备中使用右滑退出功能,可以让你更加方便地退出一个应用程序,提高用户体验,建议大家在使用安卓设备的时候,尝试使用这个实用的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值