Android 四大组件

一、四大组件

1、Activity(View)

注:向用户展示界面,并且和用户进行交互的界面,用户进行触摸,点击等操作

(一)生命周期:

(1)Activity启动时生命周期

(2)Activity进行切换的生命周期生


(3)点击Back键返回的生命周期



(二)启动模式:

注:activity有四种启动模式如下:

(1)standard(标准模式)

注:遵循后进先出,先进后出的模式,最后进栈的先出栈系统不会进行判断这个Activity是否存在于栈中,每次启动都会先创建一个实例,并处于栈顶位置。

(2)singleTop(栈顶复用模式)

注:当启动的Activity位于栈顶时,则不用创建新的实例如果要启动的activity没有位于栈顶时,则重新创建一个新的实例,位于栈顶


(3)singleTask(栈内复用模式)

注:在应用程序中有且只有一个实例每次启动时都会检查栈中是否存在该Activity实例,如果已经存在则直接使用实例,并将当前activity之上的所有Activity出栈,如果没有发现则创建一个新的实例

(4)singleInstance(启动新的任务栈)

注:如果一个应用系统中都只有一个实例,会启动一个新的任务站不管从哪个任务栈中启动,只会创建一个Activity实例,并且会使用一个全新的的任务栈来装载该Activity。

两种情况如下:1、如果要启动的activity不存在,系统会创建一个新的任务栈,再创建该Activity实例,并把它加入到栈顶:如图

2、如果要启动的activity已经存在,无论位于哪个应用程序或者哪个任务栈中,系统都会把该activity所在的任务栈转到前台,从而显示该activity

2、Service(服务)

(一)生命周期:

(1)直接开启startService()开启,使用stopService()关闭

注:strat启动的服务,调用者退出后service仍然存在,start和stop只能开启和关闭服务,无法操作service

(2)绑定开启bindService(),使用unbindService()解绑,绑定开启,解绑结束

注:bind开启的服务,bind和unbind可以操作service,调用者退出后随调用者销毁

(二)启动服务:

注:若一个startService()启动多次,则oncreat()只调用一次

(1)四个手动调用方法


(2)五个自动调用方法


注:*整个生命周器内,只有startCommand()能被多次调用,其他方法只能调用一次(只能绑定和解绑一次)

*绑定后没有解绑,无法使用stopService()停止

*若已onCreate(),则startService()只调用startCommand()*若bindService()开启,则调用unbindService()时就会自动调用onDestory()销毁

3、Broadcast Receiver(广播)

注:是一个全局的监听器,作用就是监听app并作出响应

(一)广播的概念:

系统在产生某个事件时发送广播,应用程序使用广播接收者接受这个广播,就知道系统产生了什么事件。

系统在运行中,会产生很多事件:开机,关机,打电话,发短信,电量改变等

(二)广播的两种类型

(1)有序广播:

所有跟广播intent匹配的广播接收者都可以接收到广播,但是会按照广播接收者的优先级来决定接受者的先后顺序,优先级定义:-1000~1000

(2)无序广播:

所有跟广播intent匹配的广播接收者都可以接收到广播,没有先后顺序(同时收到)

(三)两种注册方式

(1)动态注册

注:需要在代码中动态指定广播地址并注册,通常在Activity和service中注册广播。但是在activity和service进行销毁的时候一定要进行解除注册,否则系统会报一个异常,故在onDestory()中进行解绑

*封装广播类

public class BootBroadcastReceiver {

   private static BootBroadcastReceiver receiver=new BootBroadcastReceiver();

   public static BootBroadcastReceiver getInstance(){

        return receiver;

    }

    /** * 注册广播接收者

    *

 @param activity

    * @param broadcastReceiver

     * @param filter

     */

   public void regiesterReceiver(Context activity, BroadcastReceiver broadcastReceiver, IntentFilter filter){

        if (broadcastReceiver!=null) {

            activity.registerReceiver(broadcastReceiver, filter);

        } }

   /** * 注销广播接收者 */

   public void unregisterReceiver(Context activity,BroadcastReceiver broadcastReceiver){

       if (broadcastReceiver!=null) {

            activity.unregisterReceiver(broadcastReceiver);

        } }

    /** * 发送广播 **/

    public void sendBroadCast(Context activity,Intent intent){

           activity.sendBroadcast(intent);     

      }}

*发送广播

/**发送广播*/

Intent intent = new Intent();intent.putExtra("msg",content);

intent.setAction("webscoket_service");

BootBroadcastReceiver.getInstance().sendBroadCast(getActivity(),intent);

MyBroadCastReceiver.class(接SHOU广播)

public class MyBroadCastReceiver extends BroadcastReceiver{

    @Override

    public void onReceive(Context context, Intent intent) {

       String msg=intent.getStringExtra("msg");

       ToastUtils.show(msg);

    }}

*Activity.class中:

/*** * 接收接收广播 */

MyBroadCastReceiver localReceiver;private void broadcast(){

    try { localReceiver=new MyBroadCastReceiver();

       IntentFilter filter=new IntentFilter();

        filter.addAction("webscoket_service");

       BootBroadcastReceiver.getInstance().regiesterReceiver(getActivity(),localReceiver,filter);

   } catch (Exception e)

 { e.printStackTrace();

   }}

@Override

protected void onDestroy() {

//解除注册

   BootBroadcastReceiver.getInstance().unregisterReceiver(getActivity(), localReceiver) ;

//注销广播接收者

    super.onDestroy();

}

(2)静态注册

注:在清单文件AndroidManifest.xml中进行配置,这种方式的注册时常驻的,当应用关闭后,只要有广播发出,就可以接收到。

*AndroidManifest.xml

   *Activity.class中:

Intent intent=new Intent("android.intent.action.MY_STATIC_BROADCAST");

intent.putExtra("msg","hello sttaic receiver");

sendBroadcast(intent);

*MyBroadCastReceiver.class

(接受广播)

public class MyBroadCastReceiver extends BroadcastReceiver{

   @Override

    public void onReceive(Context context, Intent intent) {

       String msg=intent.getStringExtra("msg");

       ToastUtils.show(msg);

   }}

(四)生命周期(动态注册)

方法描述registerReceiver(broadcastReceiver)注册广播unregisterReceiver(broadcastReceiver)解绑广播sendBroadcast(intent)发送广播

4、Content Provider(内容提供者)

注:封装数据的跨进程传输,使用getContentResolver()拿到ContentResolver进行增删改查contentProvider以一个或多个表(与在关系型数据库中的表类似)的形式将数据呈现给外部应用。行表示提供程序收集的某种数据类型的实例,行中的每个列表示为实例收集的每个数据。

(一)实现方法

注:还有ContentProvider与URI,时间原因,就暂时不写了,见谅见谅

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容