关于Android四大组件的生命周期和使用方法

关于Android四大组件的生命周期和使用方法

Activity的生命周期

Activity作为在应用程序中与用户交互最多的组件,他的生命周期至关重要。

  • 我们实践一下 打开一个Activity的生命周期
    要说activity 就难免不提及Fragment 我们在Activity中使用了Fragment,来看一下随着Activity的启动,Activity和 Fragment的生命周期是怎么样的。
    Activity的生命周期
    Fragment的生命周期

  • 当手机屏幕关闭的时候
    这里写图片描述这里写图片描述

  • 当手机屏幕再次点亮的时候的生命周期
    关于Android四大组件的生命周期和使用方法_第1张图片
    这里写图片描述

  • 这几种情况比较简单,但是一般我们的额MainActivity 都会使用好几个Fragment来管理,那么,当每个Fragment来回切换的时候他们的生命周期又是怎么样的呢,让我们来看一下
    刚才我们只是展示了MainActivity中只有一个Fragment的情况下他们的生命周期
    现在我要从HomeFragment中切换到到VedioFragment中,他的生命周期回事怎么样的呢
    关于Android四大组件的生命周期和使用方法_第2张图片

  • 可以看到他的生命周期和HomeFragment的生命周期是一样的的但是让我们再次回到HomeFragment中取看看会有什么变化
    这里写图片描述这个方法是干什么用的呢,其实是我们在代码中设置了Fragment的切换方式,我们用了Hindden和show方法来管理Fragment才会在每次切换Fragment的时候回调这个方法,以方便我们处理数据。当然如果你用Replace方法来管理Fragment的话它是不会回调这里的。不信你可以尝试一下。

附两张图关于Android四大组件的生命周期和使用方法_第3张图片
关于Android四大组件的生命周期和使用方法_第4张图片

Service的生命周期

要说service 就必须先说一下它的几种启动方式

- 先来一张官方生命周期的图
关于Android四大组件的生命周期和使用方法_第5张图片
- 第一种通过startService()方法开启的Service
不管开启他的Activity的实例是否存在,这个Service都会运行在后台,也就是说从StartService()方法调用之后起,这个Activity与Service就不存在关系了,除非,你在Activity中调用StopService()方法或者Service自身StopSelf。
这里写图片描述
- 第二种是通过bindService()方法,这里会调用Service的onCreate()方法,不管调用 bindService 调用几次,onCreate方法都只会调用一次,同时onStart方法始终不会被调用。只有调用unbindService()方法断开连接或者调用bindService()方法的Activity不存在了,系统将会自动停止Service。
这里写图片描述
- 第三种如果一个Service又被启动又被绑定,则该Service将会一直在后台运行。并且不管如何调用,onCreate始终只会调用一次,对应startService调用多少次,Service的onStart便会调用多少次。调用unbindService将不会停止Service,而必须调用 stopService 或 Service的 stopSelf 来停止服务。
这里写图片描述

BrocastCastReceiver的生命周期

receiver的注册方式有两种,一种是静态注册,一种是动态注册
静态注册的程序,无论该程序是否启动,当广播到来时都会接收,并处理。而动态注册的程序只有在程序运行时才会收到广播消息,程序不运行了,它就收不到了。

  • 静态注册






    静态注册的Receiver是通过标签里的定义的name值来进行匹配的。
    发广播的方式就是
    Intent intent = new Intent("android.intent.action.TEST_RECEIVER");
    intent.putExtra("msg", "hello receiver.");
    sendBroadcast(intent);

    来发送广播的

  • 动态注册
    TestReceiver receiver = new TestReceiver();
    IntentFilter filter = new IntentFilter();
    filter.addAction("android.intent.action.TEST_RECEIVER");
    registerReceiver(receiver, filter);

ContentProvider 的使用

ContentProvider 在开发中使用的频率是最少的,一般很少接触到,但还是需要了解一下的。它是为了给不同应用提供内容访问,也就是多进程通信中会使用到
ContentProvider 封装了数据的跨进程传输,我们可以使用 getContentResolver() 拿到 ContentResolver 进行增删改查。

你可能感兴趣的:(android)