Android四大组件生命周期

Android四大组件包含Activity,Servcie,Content Provider,BroadcastReceiver

Activity

应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应,Activity之间也可以相互跳转

Activity生命周期

何为生命周期,顾名思义就是从创建到消亡的过程,通过下面这张图可以表示出Activity的生命周期的变化


682504-1405607172778d9b.gif

Activity列子

自己实现的Activity必须继承Activity,重写的生命周期的函数就是按照上面生命周期的图来执行。

package com.yonda.app.testapp.ui;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;

public class MyActivity extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    @Override
    protected void onStop() {
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}

A和B Activity 函数回调

打开APP,进入ActivityA


image.png

ActivityA跳转到ActivityB


image.png

ActivityB按back键返回


image.png

ActivityA按back键返回


image.png

Service

Service英文是服务的意思,Service是运行在后台的,需要后台运行的程序需要加入Service
Service分为两种,一种是Service,一种是IntentService(这是一种异步服务,是继承于Service的子类),所以推荐当要执行耗时操作时使用IntentService,如果不耗时,我们可以使用Service

Service启动方式

-startService
通过startService启动服务,stopServcie停止服务,调用者和Service没有建立联系

startService(new Intent(this,MyService.class));

-bindService
通过bindService绑定服务,unbindService停止服务,调用者和Service建立了联系,连接到服务,调用者可以访问Servcie的函数

 bindService(new Intent(this, MyService.class), new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {

            }

            @Override
            public void onServiceDisconnected(ComponentName name) {

            }
        }, Service.BIND_AUTO_CREATE);

Content Provider

Content Provider是内容提供器,它主要的作用就是将程序的内部的数据和外部进行共享,为数据提供外部访问接口,被访问的数据主要以数据库的形式存在,为进程间通信提供了一种解决方案

BroadcastReceiver

广播接收器,应用可以使用它对外部事件进行过滤只对感兴趣的外部事件,通过广播也可以实现进程间通讯,广播分为无序广播和有序广播
普通广播,通过Context.sendBroadcast(Intent myIntent)发送的
有序广播,通过Context.sendOrderedBroadcast(intent, receiverPermission)发送的,有序广播通过优先级控制顺序,可以在接收过程中中断广播的传递abortBroadcast()

image.png

1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

image.png

onAttach方法:顾名思义,是Fragment和Activity建立关联的时候调用。
onCreateView方法:为Fragment加载布局时调用。
onActivityCreated方法:当Activity中的onCreate方法执行完后调用。
onDestroyView方法:Fragment中的布局被移除时调用。
onDetach方法:顾名思义,是Fragment和Activity解除关联的时候调用。
重点注意一下onActivityCreated(),因为该方法是在Activity中的onCreate方法执行完成后调用,所以在onActivityCreated()调用之前 Activity的onCreate可能还没执行,所以不能在onCreateView()中进行 与Activity相关的UI操作,而应该在onActivityCreated()中进行与Activity相关的UI操作,而onCreateView中只进行UI的显示操作。

另外需要注意Fragment中不存在onRestart()方法,该方法只存在与Activity中。

Fragment相关操作对生命周期的影响

添加Fragment可以分为静态添加和动态添加两大类。静态添加是在XML中直接添加Fragment,简单方便,缺点是添加之后不能在删除。动态添加是在代码中FragmentManger使用一系列FragmentTransaction事务操作动态控制,灵活多变。一般都是使用动态添加,下面就讲讲动态添加有关的生命周期。

add:onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume

remove:onPause->onStop->onDestroyView->onDestroy->onDetach

show:onHiddenChanged(boolean hidden) hidden为false

hide:onHiddenChanged(boolean hidden) hidden为true

replace:旧Fragment的remove生命周期->新Fragment的add生命周期

replace+addToBackStack:onPause->onStop->onDestroyView->新Fragment的add生命周期
之后点击back:新Fragment的remove->onCreateView->onViewCreated->onActivityCreated->onStart->onResume 就是第一张图的线

detach:onPause->onStop->onDestroyView 可以看到只是视图被移除,Fragment关联状态还是不变,还是处于FragmentManger的管理下

FragmentTransaction.attach(Fragment var1):onStart->onResume->onCreateView

注意:Fragment的show和hide仅仅是将Fragment视图设置为是否可见,不会调用任何生命周期。该Fragment的生命周期还是会随着Activity的生命周期变化而变化,例如FragmentA hide、FragmentB show,点击Home A和B都会onPause->onStop

你可能感兴趣的:(Android四大组件生命周期)