做网站新闻移动动态,wordpress卸载,网站推广广告,北京专业网站建设公司哪家好一、问题描述 在平常开发的过程中可以发现#xff0c;很多开发者对于程序的退出都没有去认真的解决。一般要么是一个简单的finish#xff08;只是退出当前的activity#xff09;#xff0c;要么是其他的方法#xff0c;比如#xff1a; 1、第一种方法#xff1a;首先获取… 一、问题描述 在平常开发的过程中可以发现很多开发者对于程序的退出都没有去认真的解决。一般要么是一个简单的finish只是退出当前的activity要么是其他的方法比如 1、第一种方法首先获取当前进程的id然后杀死该进程 android.os.Process.killProcess(android.os.Process.myPid()) 2、第二种方法终止当前正在运行的Java虚拟机导致程序终止System.exit(0); 3、第三种方法强制关闭与该包有关联的一切执行 ActivityManager manager ( ActivityManager ) getSystemService ( Context.ACTIVITY_SERVICE ); manager.restartPackage(getPackageName()); 使用这个方法需要加入权限uses-permissionandroid:nameandroid.permission.RESTART_PACKAGES/ 但是这几种方法都是有缺陷的都不能完全退出程序比如方法一它不会把当前应用程序的activity的task栈清空。对于第三种方法它只能杀死其他的应用程序而不能杀死自己的。 二、解决方案 1、实现思路既然不能一次性全部关闭所有的Activity一般企业的解决方法就是记录所有打开的Activity利用单例模式管理Activity然后在退出程序的时候把所有打开的Activity关闭掉。 2、代码 ⑴新建一个类App继承Application它的作用是创建整个应用程序的全局实例而且需要在AndroidManifest.xml清单里面添加一下。 App类 package com.example.testexit;import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.Application;public class App extends Application {ArrayListActivity activities;private static App instance;/** 在整个应用程序创建时执行*/Overridepublic void onCreate() {activities new ArrayListActivity();getInstance();super.onCreate();}public static App getInstance() {if (null instance) {instance new App();}return instance;}public void exitApplication() {ListActivity lists instance.activities;for (Activity a : lists) {a.finish();}}
} 在其它的Activity里面要在onCreate方法里把当前Activity加进去然后在onDestroy方法里移除这个Activity。 MainActivity package com.example.testexit;import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;public class MainActivity extends Activity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);App app (App) getApplication();app.activities.add(this);}Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}Overrideprotected void onDestroy() {super.onDestroy();App app (App) getApplication();app.activities.remove(this);}}Activity1 package com.example.testexit;import android.app.Activity;
import android.os.Bundle;public class Activity1 extends Activity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);App app (App) getApplication();app.activities.add(this);}Overrideprotected void onDestroy() {super.onDestroy();App app (App) getApplication();app.activities.remove(this);}}关于这方面的内容还可以参考其他的几篇文章 http://www.2cto.com/kf/201108/99444.html http://blog.csdn.net/sgl870927/article/details/6281971 http://www.cnblogs.com/qingblog/archive/2012/06/08/2541790.html 转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/04/06/3002698.html