本篇文章内容大部分是来源于本人实际开发中的心得总结,不是非常全面,咱才疏学浅,如果有错误的地方恳请各位指出哦~

android四大组件

四大组件包括:Activity(活动),Service(服务),BroadcastReceiver(广播接收器),ContentProvider(内容提供器)

他们的一个特性是都是需要在androidManifest.xml里面注册

1:Activity篇

活动是一个包含各种元素的界面,主要用于和用户进行交互。

1.1:如何启动Activity

1.1.1:显示启动,明确指明活动的类名

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);

1.1.2:隐式启动,匹配活动的名称与类型

在AndroidManifest.xml指定名称(action)和类型(category)

<activity android:name=".SecondActivity" >
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" />
<category android:name="com.example.activitytest.MY_CATEGORY" />
</intent-filter>
</activity>

代码:

Intent intent = new Intent("com.example.activitytest.ACTION_START");
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);

1.2:Activity启动模式

通过stack栈管理,参考

1.3:Activity如何传值

与fragment结合的传值例子,参考

2:Activity生命周期

2.1:创建

onCreate -> onStart -> onResume

2.2 :销毁

onPause -> onStop -> onDestroy

2.3:生命周期

在当前activity A上,启动 activity B,此时执行顺序是

A onPause -> B 执行 onCreate -> A onStop

B调用finish()结束自己,此时执行顺序是

B 执行onStop ->A onRestart ->A onStart -> A onResume

3:服务(Service)

服务(Service)是Android中实现程序后台运行的解决方案,它非常适合用于去执行那
些不需要和用户交互而且还要求长期运行的任务。服务的运行不依赖于任何用户界面,即使
当程序被切换到后台,或者用户打开了另外一个应用程序,服务仍然能够保持正常运行。
不过需要注意的是,服务并不是运行在一个独立的进程当中的,而是依赖于创建服务
时所在的应用程序进程。当某个应用程序进程被杀掉时,所有依赖于该进程的服务也会停
止运行。

3.1:创建一个服务

继承于Service父类,记得在androidManifest.xml里的application节点注册该服务,例子

 <service android:name=".media.BGMusicService" ></service>

3.2:如何启动、关闭服务

活动.startService(new Intent(Context, 服务.class));
活动.stopService(new Intent(Context, 服务.class));

4:BroadcastReceiver(广播接收器)

广播接收器可以接收系统发出的广播(比如开机、网络变化等),也可以接收本地发出的自定义广播,对其作出处理。

4.1:创建一个广播接收器

继承于BroadcastReceiver父类,实现onReceive方法。

4.2:启动一个广播接收器

广播可以在androidMenifest.xml里面注册,实现静态启动(不依赖宿主生命周期)也可以由Context启动,关键取决于这个广播接收器的用途

比如咱们做一个来电归属地悬浮窗,那就需要静态启动,不依赖于app的生命周期。

再比如接网络变化广播,咱们app有个选项,需要频繁访问当前网络状态是否wifi,依次来决定是否下载图片。因此就需要这个广播,当网络变化时,将新网络状态赋值到某个全局变量。

需要注意的是,大部分广播接收器都需要程序允许访问某些权限的,不要忘了哟~,比如开机需要RECEIVE_BOOT_COMPLETED,网络变化需要ACCESS_NETWORK_STATE

4.2.1:静态启动,比如监听来电

 <receiver android:name=".call.IncomingCallBroadCastReceiver">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>

4.2.2:手动启动

  IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
context.registerReceiver(网络状态广播接收类, intentFilter);

需要手动注销哦

  context.unregisterReceiver(receiver);

5:ContentProvider内容提供器

android系统提供了自带的内容提供器,最常用的比如通讯录,因此在程序中,我们才可以对通讯录进行增删改查

我们也可以创建自带的内容提供器。

贴出来一个通讯录的查询与新增代码

package zhexian.app.smartcall.lib;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract; import zhexian.app.smartcall.contact.ContactEntity;
import zhexian.app.smartcall.image.ZImage;
import zhexian.app.smartcall.tools.Utils; import static android.provider.ContactsContract.Data.CONTENT_URI;
import static android.provider.ContactsContract.Data.MIMETYPE;
import static android.provider.ContactsContract.Data.RAW_CONTACT_ID; public class ZContact { public static boolean isPhoneExists(Context context, String phone) {
Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + phone);
ContentResolver resolver = context.getContentResolver();
Cursor cursor = resolver.query(uri, new String[]{ContactsContract.Data.DISPLAY_NAME}, null, null, null); boolean isExist = cursor.moveToFirst();
cursor.close();
return isExist;
} public static void Add(Activity activity, ContactEntity entity) {
ContentValues values = new ContentValues(); ContentResolver content = activity.getContentResolver();
Uri rawContactUri = content.insert(
ContactsContract.RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri); //name
values.clear();
values.put(RAW_CONTACT_ID, rawContactId);
values.put(MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, entity.getUserName());
content.insert(CONTENT_URI, values); // dept
values.clear();
values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
values.put(MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Organization.COMPANY, entity.getCompany());
values.put(ContactsContract.CommonDataKinds.Organization.DEPARTMENT, entity.getDepartment());
values.put(ContactsContract.CommonDataKinds.Organization.TITLE, entity.getJobTitle());
values.put(ContactsContract.CommonDataKinds.Organization.TYPE, ContactsContract.CommonDataKinds.Organization.TYPE_WORK);
content.insert(CONTENT_URI, values); //phone
values.clear();
values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
values.put(MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, entity.getPhone());
values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE);
content.insert(CONTENT_URI, values); //short phone
values.clear();
values.put(android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
values.put(MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, entity.getShortPhone());
values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK);
content.insert(CONTENT_URI, values); // avatar
values.clear();
values.put(
android.provider.ContactsContract.Contacts.Data.RAW_CONTACT_ID,
rawContactId);
values.put(MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, Utils.ConvertBitMapToByte(entity.getAvatarURL(), ZImage.getInstance().getBitMap(entity.getAvatarURL())));
content.insert(CONTENT_URI, values);
}
}

6:Message,Handler,Message Queue,Looper之间的关系。

在线程和ui元素交互时,我们使用Handler来避免线程安全问题。

Message作为Handler的方法sendMessage()参数,在调用Handler的时候一并传递过去。

Message放在Message Queue里面,等待Looper循环取出,作为参数回调其Handler的handleMessage方法。

android整理的一些基础知识的更多相关文章

  1. Android中的一些基础知识(三)

    最近在回顾Android的基础知识,就把一些常见的知识点整理一下,以后忘了也可以翻出来看一看. 在TextView中显示图像(使用< img>标签) 在TextView中显示图片的方法有许 ...

  2. Android中的一些基础知识(二)

    这几天在回顾Android的基础知识,就把一些常见的知识点整理一下,以后忘了也可以翻出来看一看. 简单介绍一下Activity的生命周期 在API文档中对生命周期回调的函数描述的很详细,这里我只是翻译 ...

  3. Android宝典入门篇-基础知识

    今天跟大家分享的是我学android时的笔记.以前搞net很多年了,现在还在搞这.本着活到老学到老抽了点时间学习了下android.android网上有很多的视频教程,当时对于我这样以前不了解java ...

  4. Android中的一些基础知识(一)

    翻译自这里,并做了部分修改. 什么是Android? Android是为移动设备提供的软件,它包括操作系统.中间件.和一些关键的应用程序.应用程序执行它自己的进程和在Dalvik虚拟机中的实例. An ...

  5. Android中View的基础知识

    View的界限 View就是我们看到的界面,有四个界限范围分别是, Top/Left, Bottom/Right,坐标系从左上到右下.这四个值可以通过任何View的子类调用getTop()/get.. ...

  6. JSP Web第七章整理复习 Servlet基础知识

    P206-208 Servlet项目的创建,web.xml的配置及标签含义,相关程序 创建:new 一个Servlet类,继承自javax.servlet.http.HttpServlet; 写doG ...

  7. 学习android学习必备的java基础知识--四大内部类

    学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...

  8. Unity3D基础知识梳理

    这段时间在做Unity的项目,这差不多是我的第一次实战啊~然后公司来了实习的童鞋要学Unity,但是我一向不靠谱啊,所以只能帮他们稍微梳理下基础的东西了啊,唉~学长只能帮你们到这里了~顺便就把自己这两 ...

  9. 【Java面试题系列】:Java基础知识常见面试题汇总 第一篇

    文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言 ​ 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后,一般都会让先做一份笔试题,然后公司会根据笔试题的回答结果,确定 ...

随机推荐

  1. MySQL--执行mysql脚本及其脚本编写

    http://www.cnblogs.com/kex1n/archive/2010/03/26/2286504.html

  2. MySQL------存储过程的使用

    如图: 1.创建存储过程 create procudure userAdd(na varchar(20),pass varchar(20)) select * from user where name ...

  3. 基于openssl的https服务配置

    环境: CA服务器:192.168.1.121 WEB服务器: 192.168.1.107 一.在CA服务器上生成自签证书 1.生成根私钥 (umask 077;openssl genrsa -out ...

  4. 第十一篇:Linux中权限的再讨论( 下 )

    前言 上篇随笔讲述了Linux中权限的大致实现机制以及目录权限的相关规则.本文将讲解Linux中的三种特殊权限:SUID,SGID,Sticky权限. 看完这两篇文章,你一定会对Linux的权限有个更 ...

  5. 解决ScrollView滑动RecyclerView的卡顿

    我们不的不了解ViewConfiguration这个类,官方是这么解释的Contains methods to standard constants used in the UI for timeou ...

  6. onTouch事件分发

    事件机制 我们知道view中有onTouch,onClick, 1.并且onTouch优先于onClick执行, 2.onTouch有返回值,为true时onClick并不再执行了 因为一切VIew都 ...

  7. Android无线测试之—UiAutomator UiScrollable API介绍七

    滑动到某个对象 一.滑动到某个对象相关API 返回值 API 描述 boolean scrollIntoView(UiSelector selector) 滑动到条件元素所在位置,并且尽量让其居于屏幕 ...

  8. 【BZOJ1706】[usaco2007 Nov]relays 奶牛接力跑 矩阵乘法

    [BZOJ1706][usaco2007 Nov]relays 奶牛接力跑 Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项 ...

  9. 后端程序员如何玩转AJAX

    1.原生的Ajax入门 (感觉很是繁琐,所以一般我们都是用简单的方式) 创建一个核心对象 XMLHttpRequest var xmlhttp; if (window.XMLHttpRequest) ...

  10. Servlet------>response

    request代表了请求 response代表响应 HttpServletResponse setStatus();----->发送状态码 setHeader();---->发送响应头 g ...