zoukankan      html  css  js  c++  java
  • Activity 生命周期 返回键 退出 杂谈

          此文是本人根据自己的理解以及对网络内容的参考而作,参考见文章最后,理解不当之处,恳请指正,万分感谢!

    要解决的问题:

    Activity的跳转顺序为FirstActivity—>SecondActivity—>ThirdActivity。

    问题一:

    1、在FirstActivity中双击返回键退出程序;

    2、在SecondActivity中按返回键回到FirstAcitivity;

    3、在ThirdActivity中按返回键回到SecondActivity。

    问题二:

    1、在FirstActivity中双击返回键退出程序;

    2、在SecondActivity中按返回键回到FirstAcitivity;

    3、在ThirdActivity中按返回键回到FirstActivity。

    问题一可以理解为浏览网页返回上一个页面,问题二则是回到首页。

    一、问题分解

    1、退出程序;2、双击返回键退出;3、Activity生命周期。

    重点是Activity的生命周期。

    二、退出程序

    1、退出方法

    参考http://hi.baidu.com/a420478805/item/7937000b8f7f3ae3ff240db3

    2、方法说明

         MyApplication类用于储存每一个Activity,并实现关闭所有Activity的操作;在每个Activity的onCreate方法中使用MyApplication.getInstance().addActivity(this)将该Activity添加到MyApplication的对象实例容器中;当需要关闭所有Activity时调用MyApplication.getInstance().exit()即可。

    3、MyApplication类代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36

    /**管理Activity的类,主要用于Activity的退出*/
    public class MyApplication extends Application {
     
        private List<Activity> activityList = new LinkedList<Activity>();
        private static MyApplication instance;
       
        private MyApplication()
        {
           
        }
       
        /**单例模式中获取唯一的MyApplication实例*/ 
        public static MyApplication getInstance()
        {
           if(null == instance)
           {
               instance = new MyApplication();
           }
            return instance;            
        }
       
        /**添加Activity到容器中*/
        public void addActivity(Activity activity)
        {
            activityList.add(activity);
        }
       
        /**遍历所有Activityfinish*/
        public void exit()
        {
            for(Activity activity:activityList)
            {
                activity.finish();
            }
            System.exit(0);
        }
    }

    三、双击返回键退出

    1、双击返回键退出代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

        /**双击返回键退出程序*/
        private long exitTime = 0;
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK)
            {
                if ((System.currentTimeMillis() - exitTime) > 2000)
                {
                    Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
                    exitTime = System.currentTimeMillis();
                }
                else 
                {
                     MyApplication.getInstance().exit();
                }
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }//end onKeyDown

     

    四、Activity生命周期和栈

    1、Activity生命周期图(来自Android developer)

    image

    图 Activity生命周期

    2、Activity生命状态转换(来自CSDN,原始安卓中文网)

    image

    3、Activity栈(同上)

    image

    4、Activity生命周期简单理解

    (1) Activity有四个状态:

    活动状态:当前Activity位于前台,用户可见,可以获得焦点。

    暂停状态:其他Activity位于前台,该Activity依然可见,只是不能获得焦点。

    停止状态:不可见,失去焦点。

    销毁状态:该Activity结束,或Activity所在Dalvik进程被结束。

    (2)对照生命周期图,掌握Activity处在某个状态或正向某个状态过渡时回调的函数

    五、问题的解决

    1、问题一:

    通过以上分析,问题一的解决只需在FirstActivity中添加双击返回键退出程序的代码即可。在这种情况下,只要没退出程序,Activity并没有被销毁(当然是在不考虑内存使用的情况下),只是暂停或停止了。

    2、问题二:

    可采用这种方法,当SecondActivity跳转到ThirdActivity后就销毁它(即在SecondActivity的Intent后添加finish()),那么由Activity栈可知,在ThirdActivity中按返回键时会返回到FirstActivity。

    3、问题二文件结构和.java代码,

    代码很简单,主要是FirstActivity跳到SecondActivity,SeconActivity跳到ThirdActivity,

    每个布局文件中只有一个按钮。

    image
    FirstActivity.java


     

    SecondActivity.java


     

    ThirdActivity.java

    MyApplication.java


     

    六、参考资料:

    http://blog.csdn.net/hpoi/article/details/4629065

    http://hi.baidu.com/a420478805/item/7937000b8f7f3ae3ff240db3

    http://blog.csdn.net/lizhiguo0532/article/details/7480993

  • 相关阅读:
    年轻就该多尝试,教你20小时Get一项新技能
    小程序定位地图模块全系列开发教学(超详细)
    javaScript学习笔记之break 和 continue 语句对比
    数据处理的两个基本问题03 零基础入门学习汇编语言40
    数据处理的两个基本问题01 零基础入门学习汇编语言38
    VMware虚拟机安装XP系统演示
    数据处理的两个基本问题01 零基础入门学习汇编语言38
    数据处理的两个基本问题02 零基础入门学习汇编语言39
    数据处理的两个基本问题02 零基础入门学习汇编语言39
    VMware虚拟机安装XP系统演示
  • 原文地址:https://www.cnblogs.com/helloweworld/p/2666768.html
Copyright © 2011-2022 走看看