那会儿活动所占的资源也会被放飞,把富有的Activity 都 finish了

本文转自:http://blog.csdn.net/zeus_9i/article/details/7259881

一、生命周期7个

onCreate
onStart
onResume
** onPause**
** onStop**
** onDestory**
** onRestart**

  • onCreate是开头化工作

  • onCreate和onDestory是一对。onStart和onStop是有些,控制是还是不是可知。

  • onResume和onPause是一些,控制是还是不是可交互。比如新对话框B假使完全挡住A,则A会实施onPause,onStop。即使只是有些遮挡,则只举行onPause。

  • onRestart,比如新开辟的B被关门了,又重新归来。onRestart会再次回到到onStart继续往下,并不会执行onCreate

  • onPause不能够做太复杂的操作,原因如下
    <pre>
    A.onCreate
    A.onStart
    A.onResume
    A.onPause//打开全遮挡的B
    B.onCreate
    B.onStart
    B.onResume
    A.onStop
    </pre>

看得出耗时过长,会影响B的开辟

   近日两日为通晓决Android上边退出程序难点折腾了半死,在google & baidu
上边找了很久、很久出来的一心千篇一律,说的格局有三,不过经过自己试验后总体可怜。

二、参考Android Activity类中的finish()、onDestory()和System.exit(0) 三者的区分

finish是Activity的类,仅仅针对Activity,当调用finish()时,只是将活动促进后台,并没有应声放飞内存,活动的资源并不曾被清理;当调用System.exit(0)时,杀死了任何经过,那时候活动所占的资源也会被假释。

  • Activity.finish()
    Call this when your activity is done and should be closed.
    在你的activity动作一气浑成的时候,或者Activity必要关闭的时候,调用此格局。
    当您调用此方法的时候,系统只是将最上边的Activity移出了栈,并从未应声的调用onDestory()方法,其占据的资源也未曾被立即放出。因为移出了栈,所以当您点击手机方面的“back”按键的时候,也不会找到那个Activity。

  • Activity.onDestory()
    the system is temporarily destroying this instance of the activity
    to save space.系统销毁了那些Activity的实例在内存中占据的空间。
    在Activity的生命周期中,onDestory()方法是他生命的终极一步,资源空间怎么着的都不曾咯~~。当再一次进入此Activity的时候,必须重新创建,执行onCreate()方法。

  • System.exit(0)
    那玩意儿是脱离整个应用程序的,是指向任何Application的。将全体经过一向KO掉。使用时,可以写在onDestory()方法内,亦可径直在想淡出的地点一向调用:
    System.exit(0);
    或 android.os.Process.killProcess(android.os.Process.myPid());

      多个艺术分别是:

 

  1. killProcess, 那种措施当你kill后 Activity 会重临到上一个Activity
  2. Android Level
    8(包蕴8)前应用一个API来操作,Level8未来又是别的一种,所以无法通用
  3. 使用 FLAG_ACTIVITY_CLEAR_TOP,从 A 到 B

上边介绍自己的章程:

大家都晓得 Android 的 Activity
是存着历史栈的,比如从 A -> B -> C,C 落成 finish 后回到
B,把拥有的Activity 都 finish了,程序就自然退出了。 当然在 finish
的还要也亟需是还是不是和谐程序的其他资源。所以要求想个办法把 Activity
给存起来。然后在先后退出的地点调用它们的 finish()方法。

 

运用全局变量。对了,首个想到的就是继承
Application,代码入下。

 

public class AgentApplication extends Application {

private List<Activity> activities = new ArrayList<Activity>();

    public void addActivity(Activity activity) {
        activities.add(activity);
    }

    @Override
    public void onTerminate() {
        super.onTerminate();

        for (Activity activity : activities) {
            activity.finish();
        }

        onDestroy();

        System.exit(0);
    }
}

接下来在 Activity  onCreate 的时候来调用
 addActivity (),有人可能想到那一个Application须要在享有的 Activity
 onCreate的时候都选取,需求做一个单例实例。其实历来不须要。在 Activity
中行使  this.getApplication() 就足以了。

 

最后在你须求生产程序的地点调用
application.onTerminate() 就足以了。记住:super.onTerminate()
必须调用,代码中的
onDestroy()是本身自己的放走其余资源的章程,不是系统的。

 

运作以上代码后,在LogCat
中会出现一行提示:

Process  包名 (pid  xxxxx)  has died.
 注脚你的顺序退出了。现在您可以测试了。

 

企望对大家有用。同时感谢同事胡楠帮我处理任何标题,使得自己才有时间来
写博客,谢谢

 

相关文章