Android企业级程序完全退出的解决方案
一、問題描述
? ? ? ? 在平常開發的過程中可以發現,很多開發者對于程序的退出都沒有去認真的解決。一般要么是一個簡單的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:name="android.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 {ArrayList<Activity> activities;private static App instance;/** 在整個應用程序創建時執行*/@Overridepublic void onCreate() {activities = new ArrayList<Activity>();getInstance();super.onCreate();}public static App getInstance() {if (null == instance) {instance = new App();}return instance;}public void exitApplication() {List<Activity> 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
總結
以上是生活随笔為你收集整理的Android企业级程序完全退出的解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 算法题系列(一) 两数之和、无重
- 下一篇: Android中级之网络数据解析一之Js