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发生变化时触发

  • 相关阅读:
    vue中的 computed 和 watch 的区别
    mysql8.0 初始化数据库及表名大小写问题
    sql server alwayson 调整数据文件路径
    zabbix 自定义监控 SQL Server
    mysql 创建用户及授权
    mysql 设置从库只读模式
    mysql8.0 主从复制安装及配置
    centos8.0安装mysql8.0
    centos8替换阿里数据源
    npm publish 报错 【you or one of your dependencies are requesting a package version that is forbidden by your security policy】
  • 原文地址:https://www.cnblogs.com/carlo/p/4944803.html
Copyright © 2011-2022 走看看