在Android中退出程序比較麻煩,尤其是在多個Activity的程序中,在2.2之前可以採用如下代碼退出程序:
- ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
- am.restartPackage(getPackageName());
此種方法是一種最方便和最簡單的退出程序的辦法,但是在2.2和2.2之後就不能用了,那麼如果我們要退出程序有4種辦法:
- 採用content view棧:如果程序是多界面,但是又沒有強制要求每一個界面一個Activity,可以將每個界面設計爲一個View,在界面切換時,只需要調用Activity的setContentView方法設置Activity的Contentview,這樣退出程序只需要將這一個Activity退出 就可以了,但是需要設計一個棧來管理content view。
- 可以自定義一個Activity的棧,在程序退出時將棧中的所有的Activity進行finish,這種方法,我以前的文章中有詳述。
- 前兩種方法的精髓之處都是需要自己設計一個棧用來管理界面或者Activity,這樣程序就比較複雜一些。 第3中方法就是,先讓程序到Home界面,然後再將process殺死:代碼如下:
- Intent intent = new Intent(Intent.ACTION_MAIN);
- intent.addCategory(Intent.CATEGORY_HOME);
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(intent);
- android.os.Process.killProcess(Process.myPid());
- 還有一種就是使用方法是使用Android的Broadcast機制。在所有的Activity中註冊退出程序的消息,當收到消息時調用finish方法。 然後再有退出程序功能的Activity上廣播關閉消息。代碼如下:
- package com.kingtone.activity;
- import android.app.Activity;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- /**
- * 所有Activity的父類,用來註冊退出程序的廣播事件,
- * 並且對收到的退出程序事件進行處理
- * @author Administrator
- *
- */
- public class CommonActivity extends Activity {
- //廣播的內部類,當收到關閉事件時,調用finish方法結束activity
- private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- finish();
- }
- };
- @Override
- public void onResume() {
- super.onResume();
- //在當前的activity中註冊廣播
- IntentFilter filter = new IntentFilter();
- filter.addAction(GlobalVarable.EXIT_ACTION);
- this.registerReceiver(this.broadcastReceiver, filter);
- }
- }
在需要退出程序的Activity(CommonActivity的子類)中,退出程序代碼如下:
- Intent intent = new Intent();
- intent.setAction(GlobalVarable.EXIT_ACTION); // 退出動作
- this.sendBroadcast(intent);// 發送廣播
- super.finish();
- //退出後臺線程,以及銷燬靜態變量
- System.exit(0);