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

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

應用的優雅退出

2019-11-09 15:20:12
字體:
來源:轉載
供稿:網友

開發過程中 需要退出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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台东县| 金秀| 崇阳县| 灌南县| 长葛市| 南城县| 九龙县| 葵青区| 长兴县| 达尔| 湘潭市| 盱眙县| 临洮县| 潍坊市| 全椒县| 个旧市| 陕西省| 乌海市| 保定市| 泗阳县| 敦化市| 永宁县| 克拉玛依市| 北京市| 紫阳县| 巨野县| 巴东县| 江阴市| 金寨县| 枣庄市| 武川县| 靖西县| 绥阳县| 黑山县| 息烽县| 广灵县| 蒙城县| 靖西县| 黑龙江省| 讷河市| 长宁县|