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

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

Activity的生命周期

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

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

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

  • 当手机屏幕再次点亮的时候的生命周期
    这里写图片描述
    这里写图片描述

  • 这几种情况比较简单,但是一般我们的额MainActivity 都会使用好几个Fragment来管理,那么,当每个Fragment来回切换的时候他们的生命周期又是怎么样的呢,让我们来看一下
    刚才我们只是展示了MainActivity中只有一个Fragment的情况下他们的生命周期
    现在我要从HomeFragment中切换到到VedioFragment中,他的生命周期回事怎么样的呢
    这里写图片描述

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

附两张图这里写图片描述
这里写图片描述

Service的生命周期

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

- 先来一张官方生命周期的图
这里写图片描述
- 第一种通过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 android:name=".TestReceiver">
    <intent-filter>
    <action android:name="android.intent.action.TEST_RECEIVER"/>
    <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    </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 进行增删改查。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值