应试安卓备考
一二章不重要
第三章
安卓中的长度单位
安卓中的颜色
基础控件基础属性
id表达方法
layout_weight和layout_height
margin外边距
padding内边距
控件的单位
•px:像素(pixels),即屏幕上的像素点,1px代表占据一个像素点。
•dp:独立像素(deviceindependentpixels),这是我们使用最多的一种单位,一般来说我们在布局文件中定义控件的宽高等属性时都会使用它。它是一种能够自动适应不同屏幕密度的单位,在160dpi的屏幕上,1dp=1px。由于Android碎片化严重,使用它作为长度单位可以适配不同的屏幕密度。
•sp:比例像素(scaledpixels),我们定义字体大小的时候,一般都会使用sp作单位。sp除了能够像dp一样可以适应屏幕密度的变化,还可以随着系统字体的大小设置改变作出变化。如果产品经理不想文字随着手机设置中字体的大小发生改变(例如标题),可以使用dp代替。**
一般用dp,字体用sp,避免用px。
dpi:
颜色-RGB/ARGB
表示
ARGB
依次代表透明度(Alpha)、红色(Red)、绿色(Green)、蓝色(Blue),取值范围为0255(即16进制的0x000xff)
定义方法
设置颜色
基础控件:要注意引用控件时前面的android:不能丢
TextView
概念
TextView是用于显示文字(字符串)的控件,可在代码中通过设置属性改变文字的大小、颜色、样式等功能。
常用属性
layout_height | 设置textview控件的高度 |
---|---|
layout_height | 设置TextView控件的宽度 |
text | 显示文本 |
textColor | 文本颜色 |
textSize | 字体大小 |
gravity | 文本位置,如设置为center,文本将居中显示 |
要注意引用控件时前面的android:不能丢
要注意id的定义方式为id="@+id/xxx"
EditText
概念
EditText继承自TextView,与TextView不同的是用户可以在设备上对EditText进行编辑操作,将用户信息传递给Android程序。还可以为EditText控件设置监听器,用来测试用户输入的内容是否合法。
基本属性
EditText是继承TextView的,所以TextView的属性基本都有。
Button
概念
Button是按钮,是用于响应用户的一系列点击事件,使程序更加流畅和完整。
常用属性
线性布局
线性布局(LinearLayout)主要以水平或垂直方式来显示界面中的控件。当控件水平排列时,显示顺序依次为从左到右,当控件垂直排列时,显示顺序依次为从上到下。
当控件水平排列时,控件属性layout_width只能设置为wrap_content(包裹内容让当前控件根据控件内容大小自动伸缩),不能设置为match_parent(填充父窗体由父容器大小决定控件大小)否则其余控件会被挤出屏幕右侧不显示。同理,如果控件垂直排列也会出现同样情况。
当控件水平排列时,如果控件未占满一行,会留有空白区域,这样既不美观又浪费空间。此时,可以利用layout_weight属性解决这个问题,该属性被称为权重,通过比例调整布局中所有控件的大小。
注意:当控件使用权重属性时,布局宽度属性值通常设置为0。
常用属性
权重实例:
相对布局
重点要了解padding和margin,和网页一样的。
简单的理解,padding是内边距,margin是外边距。
盒子模型
实例:
解释:
在RelativeLayout布局标签中通过paddingBottom属性指定布局与屏幕底部边距为20dp
“按钮1”通过layout_alignParentBottom属性指定当前控件位于布局底端,通过这两个属性的控制,“按钮1”的位置距离屏幕底部20dp
“按钮2”通过layout_centerHorizontal属性指定它在父布局中水平居中,通过layout_marginTop属性指定当前控件上边缘与父布局顶部距离260dp
“按钮3”通过layout_alignBottom属性指定它与“按钮2”底部对齐,通过layout_marginBottom属性指定距离“按钮2”底部100dp,通过layout_toRightOf属性指定当前按钮在“按钮2”的右边
第四章(重点中的重点)
资源引用
创建activity
生命周期生命周期函数主要看onCreate,其他的要知道什么时机
启动方式(两种intent)四种加载模式不重要
Activity数据传递(intentExtra属性)
Intent属性:categorydataactionextra
Activity
每个界面都有一个Activity,但不是每个Activity都是一个界面,有一些是为了使用创建的工具类。
资源引用
R.java:一个系统生成的资源类
在Android的程序结构中,会生成一个目录res,用于存放Android程序所用到的所有资源,例如图片、布局文件、字符串等
res目录中的文件会被映射到一个名为R.java的文件中
在程序中引用资源时,就可以通过
R.内部类.资源id
来引用资源
Androidmainfest.xml:清单文件
安卓中创建四大组件都需要在该文件中进行注册。因为AS很智能,会自动注册,所以只需要了解。
如创建ActivityExample,会自动添加一行代码:
<activityandroid:name=".ActivityExample"/>
Activity的创建
publicclassActivityExampleextendsAppcompatActivity{ //创建一个类继承Activity(现在多用AppcompatActivity)
@override //重写onCreate方法
protectedvoidonCreate(BundlesavedInstanceState) { //该方法在创建时调用,通常放一些控件的初始化代码
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_example);
}
}
==============================================================================================================
Activity是通过调用setContentView()方法来显示指定组件的。
该方法既可以接收View对象为参数,也可以接收布局文件对应的资源id为参数。
Activity的生命周期
生命周期生命周期函数主要看onCreate,其他的要知道什么时候调用
概念:
生命周期就是一个对象从创建到销毁的过程,每一个对象都有生命周期。
同样,Activity也具有相应的生命周期,Activity的生命周期中分为5种状态。
Activity有四种(有的书上是五种)生命周期状态,对应有7个不同的生命周期方法:
四种状态
Activity表现为四种状态:
1.活动状态Active:Activity在用户界面中处于最上层,完全能被用户看到,能够与用户进行交互。
2.暂停状态Pause:Activity在界面上被部分遮挡,不再处于用户界面的最上层,且不能够与用户进行交互。(如弹出选择框时)
3.停止状态Stop:Activity被其他Activity全部遮挡,界面完全不能被用户看到。(如玩游戏时来电了)
4.非活动状态Dead:Activity没有启动或者被finish()。 //安卓开发者平台上写的是killed
//多的一种是启动状态
启动状态:Activity的启动状态很短暂,一般启动之后就进入运行状态。(过渡状态)
运行状态:当Activity在屏幕的最前端时,它是可见的、有焦点的。
暂停状态:Activity对用户来说仍然是可见的,但它不再拥有焦点。(可见不可用)
停止状态:当Activity完全不可见时,它就处于停止状态,但仍然保留着当前状态和成员信息。(不可见)
销毁状态:当Activity处于销毁状态,将被清理出内存。(过渡状态)
七种生命周期方法
书上这个图感觉比较舒服
publicclassMyActivityextendsActivity{
protectedvoidonCreate(BundlesavedInstanceState);
protectedvoidonStart();
protectedvoidonRestart();
protectedvoidonResume();
protectedvoidonPause();
protectedvoidonStop();
protectedvoidonDestroy();
}
周期函数 | 调用时机 |
---|---|
onCreate() | 创建时调用 |
onStart() | 启动时调用 |
onResume() | Activity在前台可交互时调用,比如关闭子页面重获焦点 |
onPause() | 失去焦点时调用,比如打开子页面,这时候还是可见的 |
onStop() | 不可见时调用 |
onDestroy() | 被销毁时调用 |
onRestart() | 从停止状态再次启动时调用,比如多个Activity切换时 |
示例代码
onCreate()
@Override //其实就是创建activity
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
================================================================================================================
帮助理解:(不准确)
Bundle类型的数据与Map类型的数据相似,都是以key-value的形式存储数据的。
在Activity中还有一种onSaveInstanceState()机制,用于保存状态,比如让你返回HOME后再打开,页面不发生改变。这个不在Activity的生命周期中,因为并不一定会被触发。
简单理解BundlesavedInstanceState其实就是传了一个状态参数,这个参数里面存有Activity运行时的状态,可能有点像快照吧
其他的
如:onStart()
@Override //其他都一样,换个单词
protectedvoidonStart(){
super.onStart();
}
Intent(意图)组件
概念
Intent中文翻译为“意图”,它是Android程序中各个组件进行交互的一种重要方式,它不仅可以指定当前组件要执行的动作,还可以在不同组件之间进行数据传递。
Intent一般用于启动Activity、启动服务、发送广播等,承担了Android应用程序三大核心组件(Activity、Service、BroadcastReceiver)相互间的通信功能。
Intent的主要属性
建议看ppt P44开始
主要看Action,Data,Category和Extra
属性 | 设置属性方法 | 获取属性方法 | 含义 |
---|---|---|---|
Action | setAction() | getAction() | 动作Action:用于指定Intent对象的动作。 |
Data | setData() | getData() | 数据Data:执行动作的URI和MIME类型 |
Category | addCategory() | getCategories() | 类别Category:指明一个执行Action的分类 |
Type | setType() | getType() | |
Component | setComponent()setClass()setClassName() | getComponent() | |
Extra | putExtra() | getXXXExtra()获取不同数据类型的数据,如int类型则使用getIntExtra(),字符串则使用getStringExtra()getExtras()获取Bundle包 | 额外值Extra:是一个Bundle对象,实现对数据的存储 |
说明:没有特殊操作时,Category的属性值一般设置为
android.intent.category.DEFAULT
Activity的启动方式
其实就是Intent中的显式意图和隐式意图。
示例代码:
显式意图:
Intentintent=newIntent(this,Activity02.class); //创建Intent对象
startActivity(intent); //开启Activity02
隐式意图:
Intentintent=newIntent();
//设置action动作,该动作需要和清单文件中设置的一样
intent.setAction("cn.itcast.START_ACTIVITY");
intent.addCategory("android.intent.category.DEFAULT"); //可以不写,默认就是这个
startActivity(intent);
上面的代码并不能做到隐式启动activity,我们还需要在清单文件中声明对应的<intent-filter>
标签
<activityandroid:name="cn.itcast.Activity02">
<intent-filter>
<!-设置action属性,需要在代码中根据所设置的name打开指定的组件->
<actionandroid:name="cn.itcast.START_ACTIVITY"/>
<categoryandroid:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
Activity间的数据传递
通过Intent的Extra进行传递。
Intent提供了一系列重载的putExtra(Stringname,Stringvalue)方法,通过该方法可以将要传递大的数据暂存到Intent中,当启动另一个Activity后,只需将这些数据取出即可。
示例代码:
为某个Intent对象添加键名为name的字符串类型的附加数据:
intent.putExtra(“name”,”lisan”);
则获取此对象附加信息中的名为name数据信息代码为:
intent.getStringExtra(“name”);
一个
get
一个put
将Activity01中的字符串传递给Activity02中
Intentintent=newIntent(this,Activity02.class); //通过Intent开启Activity02
intent.putExtra("extra_data","HelloActivity02"); //用putExtra()方法传递了一个字符串
startActivity(intent);
在Activity02中取出传递的数据
Intentintent=getIntent(); //通过getIntent方法获取了Intent对象
Stringdata=intent.getStringExtra("extra_data"); //调用getStringExtra(Stringname)取出数据
第五章 ConstraintLayout约束布局
PPT也不长,最好整个扫一下,大概了解一下。
标签属性都不用看,卷子会给,可能要求写一点界面?
老师的PPT就是这篇博客:约束布局ConstraintLayout看这一篇就够了-简书(jianshu.com),一点没变,觉得PPT太乱的看这个。
注意:ConstraintLayout中的属性是
app:
开头的
第六章
spinner
适配器
6.6
Spinner
下拉列表框
示例代码
运行实例
PPT例2:
<!======================================================================layout/main.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 所有组件垂直摆放
android:layout_width="fill_parent" 布局管理器宽度为屏幕宽度
android:layout_height="fill_parent"> 布局管理器高度为屏幕高度
<TextView 定义文本显示组件 android:id="@+id/info_city" 定义此组件ID,程序中使用
android:text="请选择您喜欢的城市:" 定义组件的显示文字
android:layout_width="fill_parent" 组件的宽度为屏幕宽度
android:layout_height="wrap_content"/> 组件的高度为文字高度
<Spinner 定义下拉列表组件
android:id="@+id/mycity" 定义此组件ID,程序中使用
android:prompt="@string/city_prompt" 定义提示信息strings.xml中定义
android:layout_width="wrap_content" 组件的宽度为文字宽度
android:layout_height="wrap_content" 组件的高度为文字宽度
android:entries="@array/city_labels"/> 定义使用的文本资源
</LinearLayout>
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 所有组件垂直摆放
android:layout_width="fill_parent" 布局管理器宽度为屏幕宽度
android:layout_height="fill_parent"> 布局管理器高度为屏幕高度
<TextView 定义文本显示组件
android:id="@+id/info_color" 定义此组件ID,程序中使用
android:text="请选择您喜欢的颜色:" 定义组件的显示文字
android:layout_width="fill_parent" 组件的宽度为屏幕宽度
android:layout_height="wrap_content"/> 组件的高度为文字高度
<Spinner 定义下拉列表组件
android:id="@+id/mycolor" 定义此组件ID,程序中使用
android:layout_width="wrap_content" 组件的宽度为文字宽度
android:layout_height="wrap_content"/> 组件的高度为文字高度
</LinearLayout>
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 所有组件垂直摆放
android:layout_width="fill_parent" 布局管理器宽度为屏幕宽度
android:layout_height="fill_parent"> 布局管理器高度为屏幕高度
<TextView 定义文本显示组件
android:id="@+id/info_edu" 定义此组件ID,程序中使用
android:text="请选择您学历:" 定义组件的显示文字
android:layout_width="fill_parent" 组件的宽度为屏幕宽度
android:layout_height="wrap_content"/> 组件的高度为文字高度
<Spinner 定义下拉列表组件
android:id="@+id/myedu" 定义此组件ID,程序中使用
android:layout_width="wrap_content" 组件的宽度为文字宽度
android:layout_height="wrap_content"/> 组件的高度为文字高度
</LinearLayout>
<!==================================================编写Activity程序——MyView.java
publicclassMySpinnerDemoextendsActivity{
privateSpinnerspiColor=null; //定义表示颜色的列表框
privateSpinnerspiEdu=null; //定义表示学历的列表框
privateArrayAdapter<CharSequence>adapterColor=null; //下拉列表内容适配器
privateArrayAdapter<CharSequence>adapterEdu=null; //下拉列表内容适配器
privateList<CharSequence>dataEdu=null; //集合保存下拉列表选项
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState); //父类onCreate()方法
super.setContentView(R.layout.main); //调用布局管理器
this.spiColor=(Spinner)super.findViewById(R.id.mycolor);//取出组件
this.spiColor.setPrompt("请选择您喜欢的颜色:"); //定义提示信息
this.adapterColor=ArrayAdapter.createFromResource(this,
R.array.color_labels,
android.R.layout.simple_spinner_item); //从资源文件读取选项
this.adapterColor.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item); //设置列表显示风格
this.spiColor.setAdapter(this.adapterColor); //设置下拉列表选项
this.dataEdu=newArrayList<CharSequence>(); //实例化List集合
this.dataEdu.add("大学"); //设置选项内容
this.dataEdu.add("研究生"); //设置选项内容
this.dataEdu.add("高中"); //设置选项内容
this.spiEdu=(Spinner)super.findViewById(R.id.myedu); //取得下拉列表框
this.spiEdu.setPrompt("请选择您喜欢的学历:"); //设置提示信息
this.adapterEdu=newArrayAdapter<CharSequence>(this,
android.R.layout.simple_spinner_item,this.dataEdu);//定义下拉列表项
this.adapterEdu.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item); //设置下拉列表显示风格
this.spiEdu.setAdapter(this.adapterEdu); //设置下拉列表选项
}
}
MVC模型
Model
:通常可以理解为数据,负责执行程序的核心运算与判断逻辑,通过view获得用户输入的数据,然后根据从数据库查询相关的信息,最后进行运算和判断,再将得到的结果交给view来显示
view
:用户的操作接口,说白了就是GUI,应该使用哪种接口组件,组件间的排列位置与顺序都需要设计
Controller
:控制器,作为model与view之间的枢纽,负责控制程序的执行流程以及对象之间的一个互动
Adapter
则是中间的这个Controller的部分:Model(数据)—>Controller(以什么方式显示到)—>View(用户界面)
ListView
一个列表视图,由很多Item组成,每个Item的布局都是相同的。
ListView的常用属性
为了显示我们要显示的Item的值,我们需要对其进行数据绑定,这里就用到了Adapter。
使用Adapter进行绑定的方法:
实例化一个Adapter
控件与适配器绑定
Adapter
在使用ListView控件时需要进行数据适配,这样界面才会显示数据。在进行数据适配时会用到数据适配器,所谓数据适配器就是数据与视图之间的桥梁,类似一个转换器,将复杂的数据转换成用户可以接受的方式进行呈现。
下面是几种常见的数据适配器
1.BaseAdapter
概念
最基本的适配器,实际上就是一个抽象类。通常在使用自定义适配器的时候需要继承BaseAdapter。为了实现我们想要的数据显示方式,我们通常自定义一个适配器继承该适配器,实现我们想要的效果。所以BaseAdapter用的最多。
下面另两个适配器可以理解成安卓给ListView的两种预设方案。
方法
一般有四个抽象方法,有两个是比较重要的:getCount()和getView()
方法 | 功能 |
---|---|
publicintgetCount() | 得到Item的条目 |
publicViewgetView(intposition,ViewconvertView,ViewGroupparent) | 得到position对应的Item视图,position是当前Item的位置,convertView用于复用旧视图,parent用于加载XML布局 |
注意,这个抽象方法要自己重写实现,不是直接用的
复用convertView
PPT里有提到复用convertView来优化getView,我猜其实就是把publicViewgetView(intposition,ViewGroupparent)
写成publicViewgetView(intposition,ViewconvertView,ViewGroupparent)
,也就是SimpleAdapter里封装好的getView方法。
代码可能LIKE:
PPT还提到一个ViewHolder重用组件进行优化
2.SimpleAdapter
同样具有良好扩展性的一个Adapter,可以自定义多种效果
SimpleAdapter继承自BaseAdapter,实现了四种抽象方法并进行了封装,所以用SimpleAdapter进行数据适配时,只需要在构造方法里传入相应的参数。
3.ArrayAdapter
支持泛型操作,最简单的一个Adapter,只能展现一行文字
下面是PPT里一些常用的参数
第七章
重点了解事件监听和handle
事件回调
事件监听(主要是匿名内部类)
基于监听的事件处理模型的编程步骤如下:
获取普通界面组件(事件源),也就是被监听的对象。
实现事件监听器类,该监听器类是一个特殊的Java类,必须实现一个XxxListener接口。
调用事件源的setXxxListener方法将事件监听器对象注册给普通组件。
当事件源上发生指定事件时,Android会触发事件监听器,由事件监听器调用相应的方法(事件处理器)来处理事件。
基于监听的事件处理是一种“面向对象”的事件处理,主要涉及如下三个对象。
EventSource(事件源):事件发生的场所,通常就是各个组件,例如窗口、按钮、菜单等。
Event(事件):事件封装了界面组件上发生的特定事情,通常是一次用户操作,如果程序需要获得界面组件上所发生事件的相关信息,一般通过Event对象来取得。
EventListener(事件监听器):负责监听事件源所发生的事件,并对各种事件作出相应的响应。
匿名内部类
使用内部类
handle消息机制
有点难懂感觉,PPT差不多都在底下,自己理解把。
应用程序启动时,安卓系统会开启一个UI主线程,这个线程负责管理UI界面的控件,并进行事件分发。
在主线程中绑定了Handler对象,并在事件触发时创建子线程用于某些耗时操作,当子线程工作完成,会向Handler发送一个已完成信号,Handler接收到信号,就会更新UI。
理想案例:
输入一个文件地址,点击按钮即可将该图片在UI上显示。
实现:
创建一个URL对象,在button的点击事件中分配一个子进程,通过该URL对象获取HttpURLConnection对象,最后将返回流输出在UI上。
如果子进程获取成功,会给Handler对象一个更改UI的Message,然后Handler把这个Message发送给主线程,更改UI。
//我也不知道我写的是啥,看PPT把
第八章(了解)
跳过
第九章
启动方式startService和bindService自启动和绑定生命周期差异P165
主要了解两个的区别,估计是简答吗?
服务的生命周期:
服务的启动方式有两种:startService()方法和bindService()方法。他们有着不同的生命周期,如下:
startService()方法:自启动方法/非绑定方法
bindService()方法:绑定方法
简单介绍这些方法:
方法 | 含义 |
---|---|
onCreate() | 第一次创建服务时执行的方法 |
onDestory() | 服务被销毁时执行的方法 |
onStartCommand() | 客户端自启动方法启动服务时执行该方法 |
onBind() | 客户端调用绑定方法启动服务执行该方法 |
onUnbind() | 客户端调用unBindService()方法断开服务时执行的方法 |
※※※※※※※
通过
startService()
方法启动服务,执行的生命周期方法为onCreate()
、onStartCommand()
,然后服务处于运行态。直到调用stopSelf()
或者其他组件调用stopService()
方法,服务才停止,最后被系统销毁。通过
startService()
方法启动服务,服务会长期运行在后台,并且服务的状态与开启组件的状态无关,即使开启服务的组件销毁,服务也会继续运行。所以该方法可以长期启动服务。通过
bindService()
方法启动服务,执行的生命周期方法为onCreate()
、onBind()
,然后服务处于运行态。直到调用unBindService()
时,服务被解绑,调用onUnbind()
方法,最后被系统销毁。当一个组件通过该方法启动服务,服务会与组件绑定。组件被销毁时,服务也会被销毁。通常用在短暂开启某些服务时。
PPT如下:
第十章
主要是SharedPreferences和ContentProvide
代码考察不多
五个存储方式的使用场景和主要差异
ContentProvider重要
10.2.SharedPreferences
概念:
SharedPreferences是Android提供的用来存储一些简单的配置信息的一种机制。采用XML格式将数据存储到设备中。
SharedPreference
s中的value值只能是Float、Int、Long、Boolean、String、StringSet类型数据。
SharedPrefernces
对象本身只能获取数据,并不支持数据的存储和修改,数据的存储和修改需要通过SharedPrefernces.Editor()
对象实现,要获取Editor实例对象,需要调用SharedPrefernces.Editor.editor()
方法。
常用的方法
存取过程
1.通过context.getSharedPreferences()方法获得SharedPreferences对象,参数依次为生成的配置文件名,切忌不要写上文件尾!!!只写文件名就可以了,另外后面那个是操作模式,和前面文件学的操作模式类似,同时是有四种方式,只是前面多个Context而已
2.调用ed.edit()获得Editor对象
3.调用editor对象的putXxx(),将不同类型的数据写入,参数是键值对的形式!
4.完成上述步骤后,此时的数据依旧是在内存当中,需要做最后一步,调用commit()方法,提交数据,就是提交数据到xml文件中
存储数据示例代码
//获取sp对象,参数data表示文件名,MODE_PRIVATE表示文件操作模式
SharedPreferncessp=getSharedPreferences(“data”,MODE_PRIVATE);
SharedPrefernces.Editoreditor=sp.edit();//获取编辑器
editor.putString(“name”,“CSTG_寅子”);//存入String类型数据
editor.putInt(“age”,8);//存入int类型数据
editor.commit();//提交修改
获取数据示例代码
SharedPreferncessp=getSharedPrefernces("data",MODE_PRIVATE);
Stringdata=sp.getString("name",""); //获取用户名,第二个值为缺省值,如果sp中不存在该key,返回缺省值
10.3ContentProvide
这一段有五十多张PPT,自己看吧。。
概念
ContentProvide(内容提供者)是安卓四大组件之一,功能是在不同程序之间实现数据共享。
ContentProvide是不同应用程序之间进行数据共享的标准API,如果想要访问ContentProvider中共享的数据,就一定要借助ContentResolver类,该类的实例需要通过Context中的getContentResolver()方法获取。
ContentProvider是不同应用程序之间进行数据交换的标准API,以Uri形式对外提供数据,允许其他应用操作本应用数据。其他应用则使用ContentResolver,并根据ContentProvider提供的Uri操作指定数据。
是应用程序之间共享数据的一种接口机制,是一种更为高级的数据共享方法,可以指定需要共享的数据,而其他应用程序则可在不知道数据来源、路径的情况下,对共享数据进行查询、添加、删除和更新等操作
概念:
过程:
可以看出,A应用需要使用
ContentProvider
暴露数据,才能被其他应用操作。B应用必须通过
ContentResolver
操作A应用暴露出来的数据,而A应用会将操作结果返回给ContentResolver
然后ContentResolver
再将操作结果返回给B应用。
URI
创建过程
1.定义子类继承ContentProvide抽象类
2.重写一系列增删改查的方法,对数据进行操作
3.声明CONTENT_URI,实现UriMatcher
4.在清单文件中进行注册
使用
应用通过ContentProvide共享数据,ContentResolver对共享的数据进行操作。ContentResolver起一个中介的作用。
五个存储方式的使用场景和主要差异总结
文件存储是一种较常用的方法,与Java中的文件存储类似,是通过I/O流的形式存储数据到手机内存、SD卡。可以存储大数据,如文本、图片、音频等。
SharedPreferences是Android提供的用来存储一些简单的配置信息的一种机制。采用XML格式将数据存储到设备中。
SQLite数据库:结构化数据
SQLite是一个轻量级数据库,比传统数据库更适合用于嵌入式系统占用资源少,运行高效可靠,可移植性强提供了零配置(zero-configuration)运行模式.
网络存储(PPT里没介绍):需要与网络数据包打交道,将数据存储在服务器上,通过网络提供的存储空间来存储/获取数据信息,存储一些在线资源供用户使用。
看完这,已经开摆了,太多了。。。。
第十一章
了解标准广播
第十二章
考的少
两种方案. HttpURLConnection HttpClient!
不想看就别看了
第十三章
不想看辣,开摆!
2.重写一系列增删改查的方法,对数据进行操作
3.声明CONTENT_URI,实现UriMatcher
4.在清单文件中进行注册
[外链图片转存中…(img-LLio57G5-1655653740173)]
[外链图片转存中…(img-eRxDCSo7-1655653740174)]
[外链图片转存中…(img-W5E054BH-1655653740174)]
使用
应用通过ContentProvide共享数据,ContentResolver对共享的数据进行操作。ContentResolver起一个中介的作用。
[外链图片转存中…(img-CJTcBwzb-1655653740174)]
五个存储方式的使用场景和主要差异总结
文件存储是一种较常用的方法,与Java中的文件存储类似,是通过I/O流的形式存储数据到手机内存、SD卡。可以存储大数据,如文本、图片、音频等。
SharedPreferences是Android提供的用来存储一些简单的配置信息的一种机制。采用XML格式将数据存储到设备中。
SQLite数据库:结构化数据
SQLite是一个轻量级数据库,比传统数据库更适合用于嵌入式系统占用资源少,运行高效可靠,可移植性强提供了零配置(zero-configuration)运行模式.
网络存储(PPT里没介绍):需要与网络数据包打交道,将数据存储在服务器上,通过网络提供的存储空间来存储/获取数据信息,存储一些在线资源供用户使用。
看完这,已经开摆了,太多了。。。。
第十一章
了解标准广播
[外链图片转存中…(img-WXuPL6Zf-1655653740174)]
第十二章
考的少
两种方案. HttpURLConnection HttpClient!
不想看就别看了
第十三章
不想看辣,开摆!