android整理的一些基础知识
本篇文章内容大部分是来源于本人实际开发中的心得总结,不是非常全面,咱才疏学浅,如果有错误的地方恳请各位指出哦~
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启动模式
1.3:Activity如何传值
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整理的一些基础知识的更多相关文章
- Android中的一些基础知识(三)
最近在回顾Android的基础知识,就把一些常见的知识点整理一下,以后忘了也可以翻出来看一看. 在TextView中显示图像(使用< img>标签) 在TextView中显示图片的方法有许 ...
- Android中的一些基础知识(二)
这几天在回顾Android的基础知识,就把一些常见的知识点整理一下,以后忘了也可以翻出来看一看. 简单介绍一下Activity的生命周期 在API文档中对生命周期回调的函数描述的很详细,这里我只是翻译 ...
- Android宝典入门篇-基础知识
今天跟大家分享的是我学android时的笔记.以前搞net很多年了,现在还在搞这.本着活到老学到老抽了点时间学习了下android.android网上有很多的视频教程,当时对于我这样以前不了解java ...
- Android中的一些基础知识(一)
翻译自这里,并做了部分修改. 什么是Android? Android是为移动设备提供的软件,它包括操作系统.中间件.和一些关键的应用程序.应用程序执行它自己的进程和在Dalvik虚拟机中的实例. An ...
- Android中View的基础知识
View的界限 View就是我们看到的界面,有四个界限范围分别是, Top/Left, Bottom/Right,坐标系从左上到右下.这四个值可以通过任何View的子类调用getTop()/get.. ...
- JSP Web第七章整理复习 Servlet基础知识
P206-208 Servlet项目的创建,web.xml的配置及标签含义,相关程序 创建:new 一个Servlet类,继承自javax.servlet.http.HttpServlet; 写doG ...
- 学习android学习必备的java基础知识--四大内部类
学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...
- Unity3D基础知识梳理
这段时间在做Unity的项目,这差不多是我的第一次实战啊~然后公司来了实习的童鞋要学Unity,但是我一向不靠谱啊,所以只能帮他们稍微梳理下基础的东西了啊,唉~学长只能帮你们到这里了~顺便就把自己这两 ...
- 【Java面试题系列】:Java基础知识常见面试题汇总 第一篇
文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后,一般都会让先做一份笔试题,然后公司会根据笔试题的回答结果,确定 ...
随机推荐
- unity导弹算法 预计目标点
关于导弹的飞行算法,网上有很多教程.简单算法无非是获取目标点的当前位置,然后导弹朝目标方向移动.高深点的,就是通过计算获取碰撞点然后朝着目标移动.如果你能看懂这个高深算法的话,可以去看原帖:http: ...
- STL容器:deque双端队列学习
所谓deque,是"double-ended queue"的缩写; 它是一种动态数组形式,可以向两端发展,在尾部和头部插入元素非常迅速; 在中间插入元素比较费时,因为需要移动其它元 ...
- Nuget包制作最佳解决方案
https://www.cnblogs.com/drea/p/8418717.html 最近研究ABP框架,下载其全套源码,想“据为己有”,这样添加功能或者修改源码的话就非常方便了,否则搭建项目直接用 ...
- Struts2_day02--Struts2封装获取表单数据方式
Struts2封装获取表单数据方式 原始方式获取表单封装到实体类对象 属性封装(会用) 1 直接把表单提交属性封装到action的属性里面 2 实现步骤 (1)在action成员变量位置定义变量 - ...
- 敏捷开发Scrum学习
官方:http://baike.baidu.com/link?url=VGFzdJpuHX3g90kIX6l1QABWMmBNyf30sTGuEcJ6OJVMq0Cot1G9Imbu1gls-xpI6 ...
- echarts x轴坐标文字显示不全
在echarts中应用柱状图或者折线图时,当数据量过多的时候,X轴的坐标就会显示不全(如下图图一),在ECharts图表组件内部有一个机制,用于统计xAxis坐标刻度的个数和图表宽度,从而会自动调整刻 ...
- c++ const(不断跟新)
1.把一个 const 对象的地址赋给一个普通的.非 const 对象的指针也会导致编译时的错误: const double pi = 3.14; double *ptr = π // error: ...
- How to install sharepoint server 2010 sp2 in window 7 x64
1. 下载 sharepoint server 2010 sp2 x64 2. 下载 前置环境插件 Microsoft FilterPack 2.0 (CD "C:\Program Fil ...
- Android之內置、外置SDCard
From:http://blog.csdn.net/u011290399/article/details/10363881 在项目中,发现通过Android提供的API获取外置SDCard的操作一直不 ...
- Servlet3.0文件上传
Servelt3.0文件上传作为一种便捷的文件上传方式很是值得我们去应用的 1.Servlet3.0文件上传使用步骤 浏览器端的要求 表单的提交方法必须是post 必须有一个文件上传组件 <in ...