国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

應用的優雅退出

2019-11-09 14:16:35
字體:
來源:轉載
供稿:網友

開發過程中 需要退出APP,這個時候 就需要對退出進行處理 。我最常用的是兩種方式,第一種方式是:建立一個全局容器類將activity都保存起來,退出時候遍歷所有的activity

第二種方式是建立廣播,當我退出的時候發送一個退出廣播。

第一種方式 定義BaseActivity 如下代碼:

 @Override    PRotected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);// 添加Activity到堆棧        AtyContainer.getInstance().addActivity(this);    }    @Override    protected void onDestroy() {        super.onDestroy();// 結束Activity&從棧中移除該Activity        AtyContainer.getInstance().removeActivity(this);    }}class AtyContainer {    private AtyContainer() {    }    private static AtyContainer instance = new AtyContainer();    private static List<Activity> activityStack = new ArrayList<Activity>();    public static AtyContainer getInstance() {        return instance;    }    public void addActivity(Activity aty) {        activityStack.add(aty);    }    public void removeActivity(Activity aty) {        activityStack.remove(aty);    }    /**     * 結束所有Activity     */    public static void finishAllActivity() {        for (int i = 0, size = activityStack.size(); i < size; i++) {            if (null != activityStack.get(i)) {                activityStack.get(i).finish();            }        }        Log.d("調用finfshAllactivity", "-------------------");        activityStack.clear();    }

在MainActivity 里面繼承BaseActivity  實現如下代碼:

private boolean isExit = false;

@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {    if (keyCode == KeyEvent.KEYCODE_BACK) {        //   Toast.makeText(this, "點擊兩次離開", Toast.LENGTH_SHORT).show();        ToQuitTheApp();        return false;    } else {        return super.onKeyDown(keyCode, event);    }}//封裝ToQuitTheApp方法private void ToQuitTheApp() {    if (isExit) {      finishAllActivity();    } else {        isExit = true;        Toast.makeText(MainActivity.this, "再按一次退出APP", Toast.LENGTH_SHORT).show();        mHandler.sendEmptyMessageDelayed(0, 3000);// 3秒后發送消息    }}//創建Handler對象,用來處理消息Handler mHandler = new Handler() {    @Override    public void handleMessage(Message msg) {//處理消息        // TODO Auto-generated method stub        super.handleMessage(msg);        isExit = false;    }};

這個時候 即可優雅退出 。

第二種方式 定義BaseActivity  代碼如下 

private static final String EXITACTION = "action.exit";private ExitReceiver exitReceiver = new ExitReceiver();@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    IntentFilter filter = new IntentFilter();    filter.addAction(EXITACTION);    registerReceiver(exitReceiver, filter);}@Overrideprotected void onDestroy() {    super.onDestroy();    unregisterReceiver(exitReceiver);}public class ExitReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context, "廣播方式離開", Toast.LENGTH_SHORT).show();        BaseActivity2.this.finish();    }}

同樣在MainActivity里面 這樣處理

@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {     ExitReceiver exit=new ExitReceiver();    Intent intent = new Intent(Intent.ACTION_MAIN);    intent.addCategory(Intent.CATEGORY_HOME);         exit.onReceive(MainActivity.this,intent);    return super.onKeyDown(keyCode, event);}

github 地址:https://github.com/yuanchongzhang/activity_exit


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南通市| 沛县| 桃源县| 南丰县| 精河县| 彭水| 巨野县| 玉树县| 天镇县| 榆树市| 隆回县| 云霄县| 武陟县| 中牟县| 镇沅| 涪陵区| 云阳县| 澳门| 岳池县| 东方市| 莱阳市| 平顺县| 台州市| 化州市| 滦平县| 晋中市| 太湖县| 湘阴县| 河池市| 湖南省| 莱西市| 长泰县| 基隆市| 伽师县| 南宁市| 金昌市| 澳门| 桂东县| 新化县| 常德市| 凤阳县|