Android 2.2アプリケーションの完全終了


多くの資料と長期的な実践を探した後.
確かに実行可能なAndroid 2をまとめた.2アプリケーションを完全に終了する方法.
まず、私が達成しなければならない効果について説明します.
1、すべてのActivityが破棄されます.
2,Applicationは破棄されました.
3、携帯のデスクトップを返却します.
4,再度システムに入る時、必ず統一の入口から入って、プログラムの必要な初期化操作を完成しなければなりません.
本文を始めて、順番に説明してコードを実現する必要があります
1、アプリケーションをカスタマイズし、Manifest.xmlに登録して使用します.

<application android:name=".app.CustomApplication">
<!--ellipsis-->
</application> 

2,Manifest.xml権限の追加

<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/> 

3、カスタムアプリケーションで定義

/**         Activity */
private List<Activity> activities;

/**     */
if ( activities == null ) {
   activities = new Vector<Activity>();
}
    
    /** Activity  */
    public synchronized void register(Activity activity) {
        activities.add(activity);
    }

    /**Activity    , Activities   */
    public synchronized void unregister(Activity activity) {
        if ( activities.size() != 0 ) {
            activities.remove(activity);
            if ( !activity.isFinishing() ) {
                activity.finish();
            }
        } else {
            Debug.l("No Activity in pool! unregister");
        }
    }

    /**
     *           Activiy,
     *      
     * 
     * @author ashtray
     * @creaetime 2011-8-10   01:46:36
     */
    public synchronized void removeAll() {
        if ( activities.size() != 0 ) {
            Activity activity = null;
            Iterator<Activity> iterator = activities.iterator();

            while (iterator.hasNext()) {
                activity = iterator.next();
                if ( !activity.isFinishing() ) {
                    activity.finish();
                    iterator.remove();
                }
            }
        } else {
            Debug.l("No Activity in pool!");
        }
    }

全体的な考え方は,プログラム中のすべてのActivityをグローバルなアプリケーション管理に任せることである.
4,Activityのライフサイクルメソッドに次のコードを追加します.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //   Application
        app = (CustomApplication) getApplication();
        app.register(this);
    }

    @Override
    protected void onDestroy() {
        app.unregister(this);
        super.onDestroy();
    }

作成時にactivtiesに自身を追加し、破棄時にactivitiesから削除します.
5,プログラムを完全に終了する場合の方法

    /**
     *          
     * 
     * @author ashtray
     * @creaetime 2011-8-26   11:21:29
     * @param app
     */
    public static void exit(CustomApplication app) {
        /**             */
        //         Activity
        app.removeAll();
        System.gc();

        //    home  
        Intent home = new Intent(Intent.ACTION_MAIN);
        home.addCategory(Intent.CATEGORY_HOME);
        home.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        app.getApplicationContext().startActivity(home);

        //       ,   
        Process.killProcess(Process.myPid());
        System.exit(10);
    }

説明はすでにコメントにあります.
3つのステップに分けられます.
すべてのActivityを削除し、携帯電話のホームインタフェースにジャンプし、アプリケーションプロセスを殺して終了することで、Applicationが破棄されることを保証します.
テストの結果,この3つのステップは1つ欠けてはいけない.そうでなければ、予想されるニーズに達することはできません.
Lagunarockオリジナルの文章、転載を歓迎して、転載して原文の作者と文章urlを明記してください.