實現按Home鍵時隱藏程式的效果:
1:Android 2.0之前需要監聽按鍵事件,進行判斷是不是按下了back鍵
2:Android 2.0之後系統提供了一個onBackPressed方法,這個方法就是專門用來監聽back鍵事件的,所以只需重寫onBackPressed方法即可
@Override
public void onBackPressed {
//實現Home鍵效果
//super.onBackPressed;這句話一定要注掉,不然又去調用預設的back處理方式了
Intent i="" new Intent(Intent.ACTION_MAIN);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addCategory(Intent.CATEGORY_HOME);
startActivity(i);
退出應用程式的實現:可以自己寫個方法,例如:
public void exitProgrames{
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
android.os.Process.killProcess(android.os.Process.myPid); // 這裡也可以用finsh() 只是killProcess殺進程比finsh()更徹底些,finsh()是通過調用Activity的 destoyt()方法來退出!
還有一種比較流行的Android經典完美退出方法,使用單例模式建立一個Activity管理對象,該對象中有一個Activity容器(具體實現自己處理,使用LinkedList等)專門負責儲存新開啟的每一個Activity,並且容易理解、易於操作,非常不錯!
MyApplication類(儲存每一個Activity,並實現關閉所有Activity的操作)
public class MyApplication extends Application {
private List<Activity> activityList = new LinkedList<Activity>();
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);
}
}
在每一個Activity中的onCreate方法裡添加該Activity到MyApplication對象執行個體容器中
MyApplication.getInstance().addActivity(this);
在需要結束所有Activity的時候調用exit方法
MyApplication.getInstance().exit();
我對其他一些退出方法進行的一點介紹和點評(不到之處還請指正):
@restartPackage(getPackageName()) (具體就不介紹了)
我在SDK2.1版本下開發的一款小軟體,放到Android2.2或2.3作業系統上無法退出,因為restartPackage方法在SDK2.1以後版本已經被廢棄不用了,理由是因為它不安全,可能關閉同其他應用程式共用的Service,而這個Service別人還要用呢,你給別人關了就不對了。
@有人說的終極退出方法:
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
System.exit(0);
實際上這種方法只是返回了Home頁面,如果你再次進入應用,你會發現進入的首介面是你先前沒有關閉的Activity。
@ 有人說調用 android.os.Process.killProcess(android.os.Process.myPid());或者System.exit(0) 其實也都是只是退出了當前的activity!
@調用系統隱藏forceStopPackage方法,這裡是通過映射調用(也有其他方法)
Method method = null;
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
try {
method = Class.forName("android.app.ActivityManager").getMethod("forceStopPackage", String.class);
method.invoke(manager,getPackageName());
} catch (Exception e) {
Log.d("force",e.getMessage());
}
我在SDK2.2和2.3的測試結果是,出現NULLPointerException,彈出錯誤視窗,程式被迫關閉,和預想的正常退出有差別。不過我們可以通過修改基類實現自己的Thread.UncaughtExceptionHandler介面的uncaughtException方法,這樣就不會有錯誤視窗彈出。程式完全退出。
@和上面一樣,不過這是故意製造異常退出(上邊是無意製造的異常),但我認為這畢竟是下策。