1.Activity(是用户可以看到的主要的界面,使用时需要在AndroidManifest.xml中编辑声明。)

  启动模式:

    启动模式一共有四种,分别是standard、singleTop、singleTask 和singleInstance ,可以在AndroidManifest.xml 中通过给<activity> 标签指定android:launchMode 属性来选择启动模式。

  生命周期:

    1. onCreate()它会在活动第一次被创建的时候调用。
    2. onStart()这个方法在活动由不可见变为可见的时候调用。
    3. onResume()这个方法在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的栈顶,并且处于运行状态。
    4. onPause()这个方法在系统准备去启动或者恢复另一个活动的时候调用。
    5. onStop()这个方法在活动完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新活动是一个对话框式的活动,那么onPause()方法会得到执行,而onStop()方法并不会执行。
    6. onDestroy()这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。
    7. onRestart()这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。

  界面之间的跳转用到Intent,同时Intent还可以调用action和在activity之间传递数据

  发送数据:

    String data = "Hello SecondActivity";
    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
    intent.putExtra("extra_data", data);

  接受数据:

    Intent intent = getIntent();
    String data = intent.getStringExtra("extra_data");

  intent分为显示和隐式两种方法

  (IntentFilter就是用于描述intent的各种属性)Intent Filter就是 用来注册 Activity 、 Service 和 Broadcast Receiver 具有能在某种数据上执行一个动作的能力。

  关于intent-filter匹配优先级:action->data->category

2.Service

  public class MyService extends Service {
    public IBinder onBind(Intent intent) {
    return null;
    }
  }

  启动方式:启动和绑定

3.BroadcastReceive

  发送广播是借助Intent

  练习时,可以把BroadcastReceive和NotificationManager结合使用

  动态注册和静态注册

    动态注册要记得取消unregisterReceiver()

    不要在onReceive()方法中添加过多的逻辑或者进行任何的耗时操作,因为在广播接收器中是不允许开启线程的,当onReceive()方法运行了较长时间而没有结束时,程序就会报错。

  从广播接受者启动活动

    Intent intent = new Intent(context,LoginActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent); // 重新启动LoginActivity

  广播接受器中启动对话框

    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
    dialogBuilder.setTitle("Warning");
    dialogBuilder.setMessage("You are forced to be offline. Please tryto login again.");
    dialogBuilder.setCancelable(false);//调用对话框,和activity中是一样的。

    AlertDialog alertDialog = dialogBuilder.create();// 需要设置AlertDialog的类型,保证在广播接收器中可以正常弹出
    alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
    alertDialog.show();

4、Content Provider

  内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序中的数据,另一种是创建自己的内容提供器给我们程序的数据提供外部访问接口。

  想要访问内容提供器中共享的数据,就一定要借助ContentResolve 类,可以通过Context 中的getContentResolver()方法获取到该类的实例。ContentResolver 中提供了一系列的方法用于对数据进行CRUD 操作,

  其中insert()方法用于添加数据,update()方法用于更新数据,delete()方法用于删除数据,query()方法用于查询数据。

  Uri uri = Uri.parse("content://com.example.app.provider/table1")

  Cursor cursor = getContentResolver().query(
    uri,            指定查询某个应用程序下的某一张表      
    projection,         指定查询的列名               
    selection,         指定where 的约束条件             
    selectionArgs,       为where 中的占位符提供具体的值          
    sortOrder);         指定查询结果的排序方式       

  查询完成后返回的仍然是一个Cursor 对象,这时我们就可以将数据从Cursor 对象中逐个读取出来了。读取的思路仍然是通过移动游标的位置来遍历Cursor 的所有行,

  然后再取出每一行中相应列的数据,代码如下所示:
    if (cursor != null) {
      while (cursor.moveToNext()) {
      String column1 = cursor.getString(cursor.getColumnIndex("column1"));
      int column2 = cursor.getInt(cursor.getColumnIndex("column2"));
      }
      cursor.close();
    }

  添加:

    ContentValues values = new ContentValues();
    values.put("column1", "text");
    values.put("column2", 1);
    getContentResolver().insert(uri, values);

  更新:

    ContentValues values = new ContentValues();
    values.put("column1", "");
    getContentResolver().update(uri, values, "column1 = ? and column2 = ?", newString[] {"text", "1"});

  删除:

    getContentResolver().delete(uri, "column2 = ?", new String[] { "1" });

  创建内容提供器:

    需要重写六个方法:

      1. onCreate()初始化内容提供器的时候调用。通常会在这里完成对数据库的创建和升级等操作,返回true 表示内容提供器初始化成功,返回false 则表示失败。

       注意,只有当存在ContentResolver 尝试访问我们程序中的数据时,内容提供器才会被初始化。
      2. query()从内容提供器中查询数据。使用uri 参数来确定查询哪张表,projection 参数用于确定查询哪些列,selection 和selectionArgs 参数用于约束查询哪些行,

       sortOrder 参数用于对结果进行排序,查询的结果存放在Cursor 对象中返回。
      3. insert()向内容提供器中添加一条数据。使用uri 参数来确定要添加到的表,待添加的数据保存在values 参数中。添加完成后,返回一个用于表示这条新记录的URI。
      4. update()更新内容提供器中已有的数据。使用uri 参数来确定更新哪一张表中的数据,新数据保存在values 参数中,

       selection 和selectionArgs 参数用于约束更新哪些行,受影响的行数将作为返回值返回。
      5. delete()从内容提供器中删除数据。使用uri 参数来确定删除哪一张表中的数据,selection和selectionArgs 参数用于约束删除哪些行,被删除的行数将作为返回值返回。
      6. getType()根据传入的内容URI 来返回相应的MIME 类型。可以看到,几乎每一个方法都会带有Uri 这个参数,这个参数也正是调用ContentResolver的增删改查方法时传递过来的。

       而现在,我们需要对传入的Uri 参数进行解析,从中分析出调用方期望访问的表和数据。

    

  

Android笔记:四大组件的更多相关文章

  1. Android笔记——四大组件详解与总结

     android四大组件分别为activity.service.content provider.broadcast receiver. ------------------------------- ...

  2. Android的四大组件之Activity

    Android的四大组件之Activity Activity:是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,B ...

  3. android中四大组件之间相互通信

    好久没有写有关android有关的博客了,今天主要来谈一谈android中四大组件.首先,接触android的人,都应该知道android中有四大组件,activity,service,broadca ...

  4. Android的四大组件

    Android的四大组件:Activity.Service.BroadcastReceiver.Content Provider. Content Provider 属于Android应用程序的组件之 ...

  5. Android开发四大组件概述

    这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity具体解释 二.Service具体解释 三.Broadcast Receiver具体解释 四.Content Provid ...

  6. Java乔晓松-android的四大组件之一Service(服务的绑定)

    android的四大组件之一Service(服务的绑定) 怎么绑定服务,又怎么解除服务,代码如下: MainActivity.java源码: package com.example.lesson14_ ...

  7. Android的四大组件及应用安装安全问题(4)

    Android的四大组件及组件间通信 如果想对四大组件有深入的了解,那永远不要停留在一些条条干干的SDK API的认识,需要了解他的通讯,他的复用,他的边界问题,这样才会对四大组件有透明的认识. 四大 ...

  8. Android深入四大组件(八)广播的注册、发送和接收过程

    前言 我们接着来学习Android四大组件中的BroadcastReceiver,广播主要就是分为注册.接收和发送过程.建议阅读此文前请先阅读Android深入理解四大组件系列的文章,知识重复的部分, ...

  9. Android深入四大组件(七)Service的绑定过程

    前言 我们可以通过调用Context的startService来启动Service,也可以通过Context的bindService来绑定Service,建议阅读此篇文章前请阅读Android深入四大 ...

  10. Android之四大组件、六大布局、五大存储 总结

    Android之四大组件.六大布局.五大存储 一.四大组件:Android四大组件分别为activity.service.content provider.broadcast receiver.   ...

随机推荐

  1. HDOJ 4336 Card Collector

    容斥原理+状压 Card Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  2. 微信要革"传统电视"的命吗?

    除夕夜不知大家是否发现微信摇一摇界面下方的菜单变成4个了?“红包,人,歌曲,电视”,红包和电视是新增的,几天之后红包这个菜单消失了,电视菜单还在,能够摇出一些电视台的直播节目单,以往的摇电视借用的是摇 ...

  3. plsql 建立oracle作业

    --.plsql中学习job --学习job --建表 create table test_job(para_date date); commit; insert into test_job valu ...

  4. iOS开发——UI基础-按钮内边距,图片拉伸

    一.内边距 UIButton有三个属性,分别可以设置按钮以及内部子控件的内边距 1.contentEdgeInsets 如果是设置contentEdgeInsets, 会把UIImageView和UI ...

  5. 带你走进rsync的世界

    导读 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录.rsync共有3种使用方 ...

  6. linux操作系统flash player问题--ubuntu

    adobe公司停止了对linux系统的flash player的更新,这导致很多网页视频不能够通过浏览器观看,很是不爽! 还好,给用户留下了一点点希望,那便是chrome浏览器. 谷歌浏览器,有一款插 ...

  7. CH Round #54 - Streaming #5 (NOIP模拟赛Day1)解题报告

    最近参加了很多CH上的比赛呢~Rating--了..题目各种跪烂.各种膜拜大神OTZZZ T1珠 描述 萌蛋有n颗珠子,每一颗珠子都写有一个数字.萌蛋把它们用线串成了环.我们称一个数字串是有趣的,当且 ...

  8. JDBC的应用

    JDBC的开发步骤: 1.  引入JDBC驱动架包 2.  程序中引入JDBC驱动类     3.  创建java与数据库的连接 4.  跟数据库交互:发送sql语句,接收数据库对sql语句的执行结果 ...

  9. C# 基于json通讯中的中文的处理

    如果通讯中产生了\\u4e00-\\u9fa5范围的中文的unicode代码,而不是\u4e00-\u9fa5范围的,那么c#的处理就比较麻烦了. 破解方法: 机制 它会把\\u4e00拆成部分来识别 ...

  10. java获取对象属性类型、属性名称、属性值

    /** * 根据属性名获取属性值 * */ private Object getFieldValueByName(String fieldName, Object o) { try { String ...