关于Android退出程序的问题(在主页面或任意页面退出App)
来源:互联网 发布:知乎 日本人写的书 编辑:程序博客网 时间:2024/06/03 00:18
在写Android退出App时,要注意是在App的主页面退出,还是任意页面退出,不要盲目的进行编码。 如点击App的“退出”按钮,页面跳转到登录页面,在登录页面退出App。在最初直接使用以下: Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); MyApplicatation.pool.shutdown();// 关闭线程池 android.os.Process.killProcess(android.os.Process.myPid());注意:在登录页面退出时,会从登录页面跳转到主页面,因此,不能直接以此方法。下面记录两种比较好用的退出方式。
1、以广播的方式
在BaseActivity(基类Activity)中 /** * 自定义广播接收者 ,以此来退出所有的Activity */private BroadcastReceiver exitAppReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if ("exitApp".equals(intent.getAction())) { context.unregisterReceiver(this); finish(); } }};private IntentFilter filter;if (filter == null) { filter = new IntentFilter(); filter.addAction("exitApp"); registerReceiver(exitAppReceiver, filter); }在要退出的页面发送广播 Intent intent = new Intent(); intent.setAction("exitApp"); sendBroadcast(intent);
2、自定义AppLication来管理所有的Activity
在自定义的Application中,// 保存所有的Activityprivate List<Activity> activityList;/** * 添加activity到activityList集合中 * * @param activity * 每一個activity */public void addActivity(Activity activity) { if (activityList == null) { activityList = new ArrayList<Activity>(); } activityList.add(activity);}public int getListSize() { if (activityList != null) { return activityList.size(); } return 0;}public void removeActivity(Activity activity) { if (activityList != null) { if (activityList.contains(activity)) { activityList.remove(activity); } }}/** 清空列表,取消引用 */public void clearActivity() { activityList.clear();}/** * app退出 */public void exit() { for (Activity activity : activityList) { if (!activity.isFinishing() && activity != null) { activity.finish(); } } clearActivity(); System.exit(0);}/** * 结束指定类名的Activity * * @param cls */public void finishActivity(Activity activity) { if (activity != null) { activityList.remove(activity); activity.finish(); activity = null; }}/** * 结束指定类名的Activity * * @param cls */public void finishActivity(Class<?> cls) { for (int i = 0; i < activityList.size(); i++) { if (activityList.get(i).getClass().equals(cls)) { finishActivity(activityList.get(i)); } }}在基类Activity(BaseActivity)中,protected MyApplicatation application;if (application == null) { application = (MyApplicatation) getApplicationContext(); } application.addActivity(this);
在退出页面:
if (null != application) {
application.exit();
}
双击退出程序
/**
* 对系统按键操作进行处理,双击退出
*/
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
// 按下的如果是BACK
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
back++;
if (back == 1) {
String appName = getResources()
.getString(R.string.app_name);
getToastdialog(“再按一次退出”);
// Toast.makeText(this, “再按一次退出” + appName, 1000).show();
new Handler().postDelayed(new Runnable() {
public void run() {
back = 0;
}
}, 2000);
}
if (back == 2) {
// 退出整个应用
not = false;
logOut(); } return false; } return super.dispatchKeyEvent(event); } return super.dispatchKeyEvent(event);}/** * 用户下线通知服务器 */private void logOut() { new Thread() { public void run() { if (null != application) { application.exit(); } }; }.start();}
- 关于Android退出程序的问题(在主页面或任意页面退出App)
- 关于android程序完全退出的问题
- android任意地方退出app
- app主页双击退出
- Android 关于极光推送退出APP时清空通知的问题
- android 双击Back键退出主页面
- 关于app退出的问题,完美退出方式
- Android程序如何在任意处完全退出应用
- 关于Android程序退出后内存释放的问题
- 关于Android程序退出后内存释放的问题
- 关于Android点击物理返回键退出程序的问题
- Android APP的退出
- Android完全退出App的一些问题
- Andorid任意页面退出
- 页面超时后用户退出回主页面源代码
- android 从任意activity退出程序
- Android 任意Activity 完全退出程序
- Android程序的退出
- A guide to convolution arithmetic for deep learning
- MATLAB图像处理之imshow和imagesc
- 02章 sublime配置
- 离线轻量级大数据平台Spark之中文字符显示问题的解决
- v4l2编程接口-----ioctl
- 关于Android退出程序的问题(在主页面或任意页面退出App)
- ns2模拟仿真的一般过程及要点
- 石子合并 帮果实 动态规划解法
- QT样式表语法(The Style Sheet Syntax)学习记录
- 观察者设计模式
- ORACLE下遍历树节点
- 如何高效地判断数组中是否包含某特定值
- 笑谈ArcToolbox (2) 开启ArcToolbox的钥匙
- Java数据爬取——爬取携程酒店数据(一)