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

posted @ 2012-09-01 16:09  helloweworld  阅读(747)  评论(0编辑  收藏  举报