Android项目应用程序—应用程序及生命周期

(一)应用程序的组成

  1.Android应用程序概述:

       Android应用程序是在Android应用框架之上,由一些系统自带和用户创建的应用程序组成。组件是可以调用的基本功能模块,Android应用程序就是由组件组成的,一个Android的应用程序通常包含4个核心组件和一个Intent,4个核心组件分别是:Activity、Service、BroadcaseReceiver和ContentProvider。

Android应用程序组件
 Android项目应用程序—应用程序及生命周期_第1张图片

   1.1Activity组件 :


        Activity是Android程序的呈现层,显示可视化的用户界面,并接收与用户交互所产生的界面事件,一个Android应用程序可以包含一个或多个Activity,其中一个作为main activity用于启动显示,一般在程序启动后会呈现一个Activity,用于提示用户程序已经正常启动。
         Activity通过View管理用户界面UI。
       在应用程序中,每一个Activity都是一个单独的类,继承实现了Activity基础父类,这个类通过它的方法设置并显示由Views组成的用户界面UI,并接受、响应与用户交互产生的界面事件,Activity通过startActivity或startActivityForResult启动另外的activity。

    1.2Service组件 :

       Service常用于没有用户界面,但需要长时间在后台运行的应用。与应用程序的其他模块(例如activity)一同运行于主线程中。一般通过startService或bindService方法创建Service,通过stopService或stopSelf方法终止Service。通常情况下,都在activity中启动和终止Service。

    1.3Intent和IntentFilter组件:

       Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。
      通常Intent分为显式隐式两类。显式的Intent,就是指定了组件名字的,是由程序指定具体的目标组件来处理,即在构造Intent对象时就指定接收者,指定了一个明确的组件(setComponent或setClass)来使用处理Intent。
例如:
Intent intent = new Intent(
getApplicationContext() ,
Test.class
);
startActivity(intent);
         
       隐式的Intent,隐式的就是没有指定Intent的组件名字,没有制定明确的组件来处理该Intent,使用这种方式时,需要让Intent与应用中的IntentFilter描述表相匹配。需要Android根据Intent中的Action、data、Category等来解析匹配。
例如:

ntent intent = new Intent();
intent.setAction("test.intent.IntentTest");
startActivity(intent);

      目标组件(Activity、Service、Broadcast Receiver)是通过设置他们的Intent Filter来界定其处理的Intent。如果一个组件没有定义Intent Filter,那么它只能接受处理显式的Intent,只有定义了Intent Filter的组件才能同时处理隐式和显式的Intent。

      1.3.1  Intent对象

      一个Intent对象包含了很多数据的信息,由六个部分组成:
                     Action——要执行的动作
                     Data——执行动作要操作的数据 
                     Category——被执行动作的附加信息
                     Extras——其它所有附加信息的集合
                     Type——显式指定Intent的数据类型(MIME)
                     Component——指定Intent的的目标组件的类名称比如要执行的 动作,类别,数据,附加信息等等。

1)Action
一个Intent的Action在很大程度上说明这个Intent要做什么,是查看(View)、删除(Delete)、编辑(Edit)等等。



2)Data:其实就是一个URI,用于执行一个Action时所用到的数据的URI和MIME。

3)component(组件),指定Intent的的目标组件的类名称。通常 Android会根据Intent 中包含的其它属性的信息,比如action、data/type、category进行查找,最终找到一个与之匹配的目标组件。

4)Category:Category指定了用于处理Intent的组件的类型信息,一个Intent可以添加多个Category,使用addCategory()方法即可,使用removeCategory()删除一个已经添加的类别。

5)Extras:有些用于处理Intent的目标组件需要一些额外的信息,那么就可以通过Intent的put..()方法把额外的信息塞入到Intent对象中,用于目标组件的使用,一个附件信息就是一个key-value的键值对。Intent有一系列的put和get方法用于处理附加信息的塞入和取出。

 1.3.2IntentFilter:


      应用程序的组件为了告诉Android自己能响应、处理哪些隐式Intent请求,可以声明一个甚至多个Intent Filter。每个Intent Filter描述该组件所能响应Intent请求的能力——组件希望接收什么类型的请求行为,什么类型的请求数据。
      Intent解析机制主要是通过查找已注册在AndroidManifest.xml中的所有IntentFilter及其中定义的Intent,最终找到匹配的Intent。在这个解析过程中,Android是通过Intent的action、type、category这三个属性来进行判断的。

 1.4BroadcastReceiver组件 :

       在Android中,Broadcast是一种广泛运用在应用程序之间传输信息的组件。而BroadcastReceiver是接受并响应广播消息的组件,对发送出来的 Broadcast进行过滤接受并响应,它不包含任何用户界面,可以通过启动Activity或者Notification通知用户接收到重要信息。

 1.4.1BroadcastReceiver过滤接收的过程:

      在需要发送信息时,把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象,然后通过调用 Context.sendBroadcast()、sendOrderBroadcast()或sendStickyBroadcast()方法,把 Intent对象以广播方式发送出去。 
      当Intent发送后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则调用BroadcastReceiver的onReceive()方法。因此在我们定义一个BroadcastReceiver时,通常都需要实现onReceive()方法。

1.4.2BroadcastReceiver注册有两种方式:

    一种方式是,静态的在AndroidManifest.xml中用<receiver>标签声明注册,并在标签内用<intent- filter>标签设置过滤器。 
    另一种方式是,动态的在代码中先定义并设置好一个 IntentFilter对象,然后在需要注册的地方调 Context.registerReceiver()方法,如果取消时就调用Context.unregisterReceiver()方法。

1.5ContentProvider组件:

ContentProvider是Android系统提供的一种标准的共享数据的机制
对ContentProvider的使用,有两种方式:
        ContentResolver访问
        Context.getContentResolver()
Android项目应用程序—应用程序及生命周期_第2张图片

(二)程序生命周期:


       程序的生命周期是指在Android系统中进程从启动到终止的所有阶段,也就是Android程序启动到停止的全过程。程序的生命周期由Android系统进行调度和控制的。
Android系统中的进程分为:前台进程可见进程服务进程后台进程空进程
Android系统中的进程优先级由高到低



2.1前台进程:

   前台进程是Android系统中最重要的进程,是指与用户正在交互的进程,包含以下四种情况:
   进程中的Activity正在与用户进行交互 
   进程服务被Activity调用,而且这个Activity正在与用户进行交互    
   进程服务正在执行声明周期中的回调方法,如onCreate()、  onStart()或onDestroy()
   进程的BroadcastReceiver正在执行onReceive()方法


2.2、可见进程:

      可见进程指部分程序界面能够被用户看见,但不在前台与用户交互,不响应界面事件的进程。如果一个进程包含服务,且这个服务正在被用户可见的Activity调用,此进程同样被视为可见进程。

2.3、服务进程:


     服务进程是指包含已启动服务的进程,通常特点: 没有用户界面在后台长期运行

2.4、后台进程:


        后台进程是指不包含任何已经启动的服务,而且没有任何用户可见的Activity的进程。

2.5、空进程:


      空进程是指不包含任何活跃组件的进程,空进程在系统资源紧张时会被首先清除。

2.6、Service生命周期:

      一个service的生命周期通常包含:创建、启动、销毁这几个过程。
      Service只继承了onCreate(),onStart(),onDestroy()三个方法,当第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,需要注意的是,如果Service已经启动了,当再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。
      创建service的方式有两种,一种是通过startService创建,另外一种是通过bindService创建Service,两种创建方式的区别在于,startService是创建并启动service,而bindService只是创建了一个service实例并取得了一个与该service关联的binder对象,但没有启动它。
Android项目应用程序—应用程序及生命周期_第3张图片

2.7BroadcastReceiver生命周期:

        Android在接收到一个广播Intent之后,找到了处理该Intent的BroadcastReceiver,创建一个对象来处理Intent。然后,调用被创建的BroadcastReceiver对象的onReceive方法进行处理,然后就撤销这个对象。

2.8Activity生命周期:

1)Activity状态
在Activity生命周期中,其表现状态有四种,分别是:活动状态暂停状态停止状态非活动状态

 在Activity生命周期中,其事件的回调方法有7个,以及Activity状态保存/恢复的事件回调方法有2个

Activity状态保存/恢复的事件回调方法
方法 是否
可终止
说明
onCreate() Activity启动后第一个被调用的函数,常用来进行Activity的初始化,例如创建View、绑定数据或恢复信息等。
onStart() 当Activity显示在屏幕上时,该函数被调用。
onRestart() 当Activity从停止状态进入活动状态前,调用该函数。
onResume() 当Activity能够与用户交互,接受用户输入时,该函数被调用。此时的Activity位于Activity栈的栈顶。
onPause() 当Activity进入暂停状态时,该函数被调用。一般用来保存持久的数据或释放占用的资源。
onStop() 当Activity进入停止状态时,该函数被调用。
onDestroy() 在Activity被终止前,即进入非活动状态前,该函数被调用。
onSaveInstanceState() Android系统因资源不足终止Activity前调用该函数,用以保存Activity的状态信息,供onRestoreInstanceState()或onCreate()恢复之用。
onRestoreInstanceState() 恢复onSaveInstanceState()保存的Activity状态信息,在onStart()和onResume ()之间被调用。

Activity生命周期分类

Activity生命周期指Activity从启动到销毁的过程。Activity的生命周期可分为全生命周期、可视生命周期和活动生命周期。
1)全生命周期   2)可视生命周期     3)活动生命周期


Activity生命周期划分及事件回调方法的调用顺序
Android项目应用程序—应用程序及生命周期_第4张图片

在活动生命周期中,关于onPause()和onSaveInstanceState()方法,它们之间的异同主要是:相同之处是这两个方法都可以用来保存界面的用户输入数据,区别在于:
onPause()一般用于保存持久性数据,并将数据保存在存储设备上的文件系统或数据库系统中。
onSaveInstanceState()主要用来保存动态的状态信息,信息一般保存在Bundle(保存多种格式数据的对象)中,系统在调用onRestoreInstanceState()和onCreate()时,会同样利用Bundle将数据传递给方法。

                                                     


你可能感兴趣的:(android,生命周期,详解,应用程序,进程管理)