退出多個activity的方法,退出多個activity

來源:互聯網
上載者:User

退出多個activity的方法,退出多個activity
1.使用List集合方式

用list儲存activity執行個體,然後逐一幹掉

import java.util.LinkedList;import java.util.List;import android.app.Activity;import android.app.AlertDialog;import android.app.Application;import android.content.DialogInterface;import android.content.Intent;public class SysApplication extends Application {private List<Activity> mList = new LinkedList<Activity>();private static SysApplication instance;private SysApplication() {}public synchronized static SysApplication getInstance() {   if (null == instance) {         instance = new SysApplication();      }         return instance;      }// add Activitypublic void addActivity(Activity activity) {      mList.add(activity);}    public void exit() {        try {           for (Activity activity : mList) {              if (activity != null)                 activity.finish();                 }             } catch (Exception e) {                 e.printStackTrace();             } finally {              //  System.exit(0);//去掉這個             }}@Overridepublic void onLowMemory() {    super.onLowMemory();      System.gc();}}在每個Activity的onCreate方法中添加類似代碼:       public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            SysApplication.getInstance().addActivity(this);        }

  在需要退出程式的時候,調用:

SysApplication.getInstance().exit();

 簡而言之,通過單例模式把每個Activity 的引用添加到一個全域鏈表中,每次退出程式調用System.exit(0)時,先調用鏈表中Activity 的finish方法 

 優點:實現簡單,邏輯清晰

2.使用廣播

推薦!!好方便!!

基本邏輯就是:定義一個BaseActivity,在這個Activity中綁定廣播,在廣播的onReceive方法中調用finish();然後以後的Activity都繼承這個Activity,退出時發送廣播,退出BaseActivity,父activity都退出了,子activity肯定退出。

代碼如下:

import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.support.v7.app.AppCompatActivity;public class BaseActivity extends AppCompatActivity {    protected 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("ExitApp");        this.registerReceiver(this.broadcastReceiver, filter);    }    @Override    protected void onDestroy() {        // TODO Auto-generated method stub        super.onDestroy(); //解除綁定        this.unregisterReceiver(this.broadcastReceiver);    }}

  一個Activity執行個體:

import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.KeyEvent;import android.view.View;import android.widget.Button;import android.widget.Toast;public class ActivityC extends BaseActivity {    Button btn;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_activity_c);        SysApplication.getInstance().addActivity(this);        btn = (Button) findViewById(R.id.acticityc_btn);        //關閉所有的activity        btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {            }        });    }    /**     * 捕獲手機物理菜單鍵     */    private long exitTime = 0;    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if(keyCode == KeyEvent.KEYCODE_BACK){//&& event.getAction() == KeyEvent.ACTION_DOWN            if((System.currentTimeMillis()-exitTime) > 2000){                Toast.makeText(getApplicationContext(), "再按一次退出程式", Toast.LENGTH_SHORT).show();                exitTime = System.currentTimeMillis();            } else {                myExit();            }            return true;        }        return super.onKeyDown(keyCode, event);    }    protected void myExit() {        //第二種退出方法       // SysApplication.getInstance().exit();        Intent intent = new Intent();        intent.setAction("ExitApp");        this.sendBroadcast(intent);        //super.finish();    }    @Override    protected void onStop() {        super.onStop();        Log.i("tag","ActivityC-onStop");    }    @Override    protected void onDestroy() {        super.onDestroy();        Log.i("tag","ActivityC-onDestroy");    }}

  就是在退出的地方調用這個:

private long exitTime = 0;    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if(keyCode == KeyEvent.KEYCODE_BACK){//&& event.getAction() == KeyEvent.ACTION_DOWN            if((System.currentTimeMillis()-exitTime) > 2000){                Toast.makeText(getApplicationContext(), "再按一次退出程式", Toast.LENGTH_SHORT).show();                exitTime = System.currentTimeMillis();            } else {                myExit();            }            return true;        }        return super.onKeyDown(keyCode, event);    }    protected void myExit() {        //第二種退出方法       // SysApplication.getInstance().exit();        Intent intent = new Intent();        intent.setAction("ExitApp");        this.sendBroadcast(intent);        //super.finish();    }

  優點:方便,方便!!只需要在退出的地方發送廣播就可以!!

這是我的退出時的輸出:

08-09 15:33:48.869 26919-26919/example.com.closeapp I/tag: MainActivity-onPause08-09 15:33:49.279 26919-26919/example.com.closeapp I/tag: MainActivity-onStop08-09 15:33:51.569 26919-26959/example.com.closeapp D/OpenGLRenderer: endAllStagingAnimators on 0x55850598b0 (RippleDrawable) with handle 0x558504151008-09 15:33:56.079 26919-26919/example.com.closeapp I/tag: MainActivity-onDestroy08-09 15:33:56.089 26919-26919/example.com.closeapp I/tag: ActivityB-onDestroy08-09 15:33:56.399 26919-26919/example.com.closeapp I/tag: ActivityC-onDestroy

  

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.