多個activity一次退出

  因爲android的API中沒有提供一次性退出的接口所以想要在多activity的程序裏面一次性退出的話就要費點功夫了。我是在一個單例對象裏面記錄activity棧中activity的引用然後在需要退出時遍歷一遍finish()掉就可以了。實現步驟如下:
1、創建一個單例對象

package com.exit;

import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;

public class ActivityManager {
         
        private Context context;
         
        private static ActivityManager activityManager;
         
        public static ActivityManager getActivityManager(Context context){
                if(activityManager == null){
                        activityManager = new ActivityManager(context);
                }
                return activityManager;
        }
         
        private ActivityManager(Context context){
                this.context = context;
        }
         
        /**
         * task map,用於記錄activity棧,方便退出程序(這裏爲了不影響系統回收activity,所以用軟引用)
         */
        private final HashMap<String, SoftReference<Activity>> taskMap = new HashMap<String, SoftReference<Activity>>();
         
        /**
         * 往應用task map加入activity
         */
        public final void putActivity(Activity atv) {
                taskMap.put(atv.toString(), new SoftReference<Activity>(atv));
        }
         
        /**
         * 往應用task map加入activity
         */
        public final void removeActivity(Activity atv) {
                taskMap.remove(atv.toString());
        }
         
        /**
         * 清除應用的task棧,如果程序正常運行這會導致應用退回到桌面
         */
        public final void exit() {
                for (Iterator<Entry<String, SoftReference<Activity>>> iterator = taskMap.entrySet().iterator(); iterator.hasNext();) {
                        SoftReference<Activity> activityReference =  iterator.next().getValue();
                        Activity activity = activityReference.get();
                        if (activity != null) {
                                activity.finish();
                        }
                }
                taskMap.clear();
        }

}

2、創建自己的根activity,重寫onCreate與onDestory

package com.exit;

import android.app.Activity;
import android.os.Bundle;

public class BaseActivity extends Activity {
         
        private ActivityManager manager = ActivityManager.getActivityManager(this);
         
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                manager.putActivity(this);
        }

        @Override
        protected void onDestroy() {
                super.onDestroy();
                manager.removeActivity(this);
        }
         
        public void exit(){
                manager.exit();
        }
         
}

3、以後創建的activity都繼承這個根activity就可以了,如下:

package com.exit.activitys;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

import com.exit.BaseActivity;
import com.exit.R;

public class ExitActivity extends BaseActivity implements OnClickListener{
         
        private Button start;
         
        private Button exit;
         
        private TextView tipTV;
         
         
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        start = (Button)findViewById(R.id.start_new_activity);
        exit = (Button)findViewById(R.id.exit_all_activity);
        tipTV = (TextView)findViewById(R.id.tip_tv);
        tipTV.setText("activity:"+this.toString());
         
        start.setOnClickListener(this);
        exit.setOnClickListener(this);
    }


        @Override
        public void onClick(View v) {
                if(v == start){
                        Intent intent = new Intent(this , ExitActivity.class);
                        startActivity(intent);
                }else if(v == exit){
                        exit();
                }
        }
}

最後是佈局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
        android:id = "@+id/tip_tv"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
<Button android:text="啓動新的activity" android:id="@+id/start_new_activity"
        android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="一次性退出" android:id="@+id/exit_all_activity"
        android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章