Android 2.2アプリケーションの完全終了
3898 ワード
多くの資料と長期的な実践を探した後.
確かに実行可能なAndroid 2をまとめた.2アプリケーションを完全に終了する方法.
まず、私が達成しなければならない効果について説明します.
1、すべてのActivityが破棄されます.
2,Applicationは破棄されました.
3、携帯のデスクトップを返却します.
4,再度システムに入る時、必ず統一の入口から入って、プログラムの必要な初期化操作を完成しなければなりません.
本文を始めて、順番に説明してコードを実現する必要があります
1、アプリケーションをカスタマイズし、Manifest.xmlに登録して使用します.
2,Manifest.xml権限の追加
3、カスタムアプリケーションで定義
全体的な考え方は,プログラム中のすべてのActivityをグローバルなアプリケーション管理に任せることである.
4,Activityのライフサイクルメソッドに次のコードを追加します.
作成時にactivtiesに自身を追加し、破棄時にactivitiesから削除します.
5,プログラムを完全に終了する場合の方法
説明はすでにコメントにあります.
3つのステップに分けられます.
すべてのActivityを削除し、携帯電話のホームインタフェースにジャンプし、アプリケーションプロセスを殺して終了することで、Applicationが破棄されることを保証します.
テストの結果,この3つのステップは1つ欠けてはいけない.そうでなければ、予想されるニーズに達することはできません.
Lagunarockオリジナルの文章、転載を歓迎して、転載して原文の作者と文章urlを明記してください.
確かに実行可能な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を明記してください.