zoukankan      html  css  js  c++  java
  • Android内的生命周期整理

    1. Android App的生命周期;

    2. Application的生命周期;

    3. Activity的生命周期;

    3.1 Fragment的生命周期;

    4. Service的生命周期;
    5. BroadcastReciver的生命周期;
    6. ContentProvider的生命周期;

    7. View的生命周期;

    -----------------------------------------------------------------

    2. Application的生命周期;

    public class App extends Application {
    
        @Override
        public void onCreate() {
            // 程序创建的时候执行
            Log.d(TAG, "onCreate");
            super.onCreate();
        }
        @Override
        public void onTerminate() {
            // 程序终止的时候执行
            Log.d(TAG, "onTerminate");
            super.onTerminate();
        }
        @Override
        public void onLowMemory() {
            // 低内存的时候执行, 资源匮乏的时候
            Log.d(TAG, "onLowMemory");
            super.onLowMemory();
        }
        @Override
        public void onTrimMemory(int level) {
            // 程序在内存清理的时候执行
            Log.d(TAG, "onTrimMemory");
            super.onTrimMemory(level);
        }
        @Override
        public void onConfigurationChanged(Configuration newConfig) {
            Log.d(TAG, "onConfigurationChanged");
            super.onConfigurationChanged(newConfig);
        }
        
    }

    onTerminate 有点特殊,不管我怎么试都不会被调用, 下面是网上的一种解释

    onTerminate 当终止应用程序对象时调用,不保证一定被调用,当程序是被内核终止以便为其他应用程序释放资源,那么将不会提醒,并且不调用应用程序的对象的onTerminate方法而直接终止进程

    还是没有说明什么时候会被调用, 读源码去 

    95    /**
    96     * This method is for use in emulated process environments.  It will
    97     * never be called on a production Android device, where processes are
    98     * removed by simply killing them; no user code (including this callback)
    99     * is executed when doing so.
    100     */
    101    public void onTerminate() {
    102    }
    103

    就是这样了.

    3. Activity的生命周期;

    这个东西都说烂了, 一张图说明一切

    文章请读: Activity生命周期回顾

    以下是log

    11-06 22:49:27.959    2872-2872/? D/CARLOZ123-MyApplication﹕ onCreate
    11-06 22:49:28.176    2872-2872/? D/CARLOZ123-MainActivity﹕ onCreate
    11-06 22:49:28.237    2872-2872/? D/CARLOZ123-MainActivity﹕ onStart
    11-06 22:49:28.270    2872-2872/? D/CARLOZ123-MainActivity﹕ onResume
    转屏
    11-06 22:49:43.759    2872-2872/? D/CARLOZ123-MyApplication﹕ onConfigurationChanged
    11-06 22:49:43.770    2872-2872/? D/CARLOZ123-MainActivity﹕ onPause
    11-06 22:49:43.771    2872-2872/? D/CARLOZ123-MainActivity﹕ onSaveInstanceState protected
    11-06 22:49:43.771    2872-2872/? D/CARLOZ123-MainActivity﹕ onStop
    11-06 22:49:43.771    2872-2872/? D/CARLOZ123-MainActivity﹕ onDestroy
    11-06 22:49:43.839    2872-2872/? D/CARLOZ123-MainActivity﹕ onCreate
    11-06 22:49:43.848    2872-2872/? D/CARLOZ123-MainActivity﹕ onStart
    11-06 22:49:43.849    2872-2872/? D/CARLOZ123-MainActivity﹕ onRestoreInstanceState protected
    11-06 22:49:43.849    2872-2872/? D/CARLOZ123-MainActivity﹕ onResume
    按返回键, 自动转为竖屏
    11-06 22:50:04.000    2872-2872/? D/CARLOZ123-MainActivity﹕ onPause
    11-06 22:50:04.238    2872-2872/? D/CARLOZ123-MyApplication﹕ onConfigurationChanged
    11-06 22:50:04.527    2872-2872/? D/CARLOZ123-MyApplication﹕ onTrimMemory
    11-06 22:50:04.527    2872-2872/? D/CARLOZ123-MainActivity﹕ onStop
    11-06 22:50:04.527    2872-2872/? D/CARLOZ123-MainActivity﹕ onDestroy

    3.1 Fragment的生命周期;

        参考: Android Fragment基础及使用

    01-02 13:35:23.059: D/LifeCycleActivity-Fragment(28235): onCreate
    01-02 13:35:23.079: D/FragmentA(28235): onAttach
    01-02 13:35:23.079: D/FragmentA(28235): onCreate
    01-02 13:35:23.089: D/FragmentA(28235): onCreateView
    01-02 13:35:23.089: D/FragmentA(28235): onActivityCreated
    01-02 13:35:23.089: D/FragmentA(28235): onStart
    01-02 13:35:23.089: D/LifeCycleActivity-Fragment(28235): onStart
    01-02 13:35:23.089: D/LifeCycleActivity-Fragment(28235): onResume
    01-02 13:35:23.089: D/FragmentA(28235): onResume
    01-02 13:43:12.629: D/LifeCycleActivity-Fragment(28235): onPause
    01-02 13:43:12.629: D/FragmentA(28235): onPause
    01-02 13:43:12.939: D/LifeCycleActivity-Fragment(28235): onStop
    01-02 13:43:12.939: D/FragmentA(28235): onStop
    01-02 13:43:12.939: D/LifeCycleActivity-Fragment(28235): onDestroy
    01-02 13:43:12.939: D/FragmentA(28235): onDestroyView
    01-02 13:43:12.939: D/FragmentA(28235): onDestroy
    01-02 13:43:12.939: D/FragmentA(28235): onDetach

    4. Service的生命周期;

    参考: http://www.cnblogs.com/mengdd/archive/2013/03/24/2979944.html

          启动service有两种方法:
          1.    Context.startService()
                 调用者(Client)与服务端(Server)之间没有关联,即使调用者退出,服务仍可运行。
          2.    Context.bindService()
                 调用者(Client)与服务端(Server)绑定在一起,可以多个调用者(Client)绑定一个服务端(Server),当所有的调用者(Client)退出,服务端(Server)也就终止。

          Service的生命周期:

          1.    被启动的服务(startService())的生命周期。
                 如果一个Service被某个Activity 调用Context.startService() 方法启动,那么不管是否有Activity使用bindService()绑定或unbindService()解除绑定到该Service,该Service都在后台运行。如果一个Service被多次执行startService(),它的onCreate()方法只会调用一次,也就是说该Service只会创建一个实例,而它的onStartCommand()将会被调用多次(对应调用startService()的次数)。该Service将会一直在后台运行,直到被调用stopService(),或自身的stopSelf方法。当然如果系统资源不足,系统也可能结束服务。
          2.    被绑定的服务(bindService())的生命周期。
                 如果一个Service被调用 Context.bindService ()方法绑定启动,不管调用bindService()调用几次,onCreate()方法都只会调用一次,而onStartCommand()方法始终不会被调用,这时会调用onBind()方法。当连接建立之后,Service将会一直运行,除非调用Context.unbindService() 断开连接或者之前调用bindService() 的 Context 不存在了(如该Activity被finish),系统将会自动停止Service,对应onDestroy()将被调用。
          3.    被启动又被绑定的服务的生命周期。
                 如果一个Service又被启动又被绑定,则该Service将会一直在后台运行。调用unbindService()将不会停止Service,而必须调用stopService()或Service的stopSelf()方法来停止服务。
          4.   当服务被停止时清除服务。
                当一个Service被终止时,Service的onDestroy()方法将会被调用,在这里应当做一些清除工作,如停止在Service中创建并运行的线程等


    5. BroadcastReciver的生命周期;

      子类需要实现onRecive方法,生命周期只能持续10s左右, 不适合做耗时操作

    public class MyReciver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
    
        }
    
    }

    6. ContentProvider的生命周期;

        子类必须实现的是onCreate, 生命周期函数只有onCreate

    public class FirstProvider extends ContentProvider {
    
        @Override
        public boolean onCreate() {
            return false;
        }

    7. View的生命周期;

    onFinishInflate() 当View中所有的子控件均被映射成xml后触发
    onMeasure( int , int ) 确定所有子元素的大小
    onLayout( boolean , int , int , int , int ) 当View分配所有的子元素的大小和位置时触发
    onSizeChanged( int , int , int , int ) 当view的大小发生变化时触发
    onDraw(Canvas) view渲染内容的细节
    onKeyDown( int , KeyEvent) 有按键按下后触发
    onKeyUp( int , KeyEvent) 有按键按下后弹起时触发
    onTrackballEvent(MotionEvent) 轨迹球事件
    onTouchEvent(MotionEvent) 触屏事件
    onFocusChanged( boolean , int , Rect) 当View获取或失去焦点时触发
    onWindowFocusChanged( boolean ) 当窗口包含的view获取或失去焦点时触发
    onAttachedToWindow() 当view被附着到一个窗口时触发
    onDetachedFromWindow() 当view离开附着的窗口时触发,Android123提示该方法和 onAttachedToWindow() 是相反的。
    onWindowVisibilityChanged( int ) 当窗口中包含的可见的view发生变化时触发

  • 相关阅读:
    DirectX标准规定 DirectX和OpenGL的不同
    Android 抽屉效果的导航菜单实现
    Servlet基础(三) Servlet的多线程同步问题
    Java微服务之Spring Boot on Docker
    Spring Cloud 微服务架构学习笔记与示例
    从你的全世界路过—一群程序员的稻城亚丁游记
    从一个国内普通开发者的视角谈谈Sitecore
    吴军《硅谷来信》思维导图笔记
    .NET Core微服务之基于Jenkins+Docker实现持续部署(Part 1)
    2018OKR年中回顾
  • 原文地址:https://www.cnblogs.com/carlo/p/4944803.html
Copyright © 2011-2022 走看看